cocos2d 的渲染机制是单线程的,需要在主线程(UI线程)里进行渲染图像, 否则 图像无法渲染到cocos窗口上。
将需要使用的 sprite 放在 Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]() 方法里 实现,
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]() {
auto visibleSize = Director::getInstance()->getVisibleSize();
auto origin = Director::getInstance()->getVisibleOrigin();
std::string china6 = "E:\\work\\showselfGame\\showselfGame\\proj.win32-turntable\\mifeng_release.win32\\turntable\\lansemeiyingbeijing.jpg";
GBKToUTF8(china6, "gbk", "utf-8");
Sprite* sprite = Sprite::create(china6);
Texture2D* texture = sprite->getTexture();
/*Sprite**/ m_sprite4 = Sprite::createWithTexture(texture);
m_sprite4->setPosition(Vec2(visibleSize / 2) + origin);
this->addChild(m_sprite4, 0);
});
然后在线程里 使用 Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]() 方法 进行处理显示图像。
Director::getInstance()->getScheduler()->performFunctionInCocosThread([=]()
{
m_cameraManager.GetVedioData(m_srcBuf, m_curWidth, m_curHeight);
//SaveBMP(m_srcBuf, "D:\\pic\\test.bmp", m_curWidth, m_curHeight, 24);
if (m_srcBuf) {
m_sprite4->getTexture()->updateWithData(m_srcBuf, 0, 0, m_curWidth, m_curHeight);
}
//bool ret = false;
//Image *image1 = new Image;
//ret = image1->initWithImageFile("E:\\work\\showselfGame\\showselfGame\\proj.win32-turntable\\mifeng_release.win32\\turntable\\turntable_bk.png");
//sprite3->getTexture()->updateWithData(image1->getData(), 0, 0, 54, 69);
//UpdateCameraData();
});