Sprite* HelloWorld::spriteWithColor(Color4F bgColor, float textureWidth, float textureHeight) { // 1: Create new RenderTexture RenderTexture *rt = RenderTexture::create(textureWidth, textureHeight); // 2: Call RenderTexture:begin rt->beginWithClear(bgColor.r, bgColor.g, bgColor.b, bgColor.a); // 3: Draw into the texture //// gradient _gradient_command.init(rt->getGlobalZOrder()); _gradient_command.func = std::bind(&HelloWorld::onDrawGradient, this, textureWidth, textureHeight); auto renderer = Director::getInstance()->getRenderer(); renderer->addCommand(&_gradient_command); //// noise cloud BlendFunc blendFunc; blendFunc.src = GL_DST_COLOR; blendFunc.dst = GL_ZERO; Sprite *noise = Sprite::create("Noise.png"); noise->setBlendFunc(blendFunc); noise->setPosition(Vec2(textureWidth / 2, textureHeight / 2)); noise->visit(); // 4: Call CCRenderTexture:end rt->end(); // 5: Create a new Sprite from the texture return Sprite::createWithTexture(rt->getSprite()->getTexture()); }
Sprite* Utils::maskedSpriteWithSprite(Sprite* textureSprite, Sprite* maskSprite) { // 1 RenderTexture * rt = RenderTexture::create( maskSprite->getContentSize().width, maskSprite->getContentSize().height ); // 2 maskSprite->setPosition(maskSprite->getContentSize().width/2, maskSprite->getContentSize().height/2); textureSprite->setPosition(textureSprite->getContentSize().width/2, textureSprite->getContentSize().height/2); // 3 maskSprite->setBlendFunc( BlendFunc{GL_ONE, GL_ZERO} ); textureSprite->setBlendFunc( BlendFunc{GL_DST_ALPHA, GL_ZERO} ); // 4 rt->begin(); maskSprite->visit(); textureSprite->visit(); rt->end(); // 5 Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture()); retval->setFlippedY(true); return retval; }
void RenderTextureImage::sceneChangeEvent(const QSceneChangePtr &e) { QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e); if (e->type() == NodeUpdated) { if (propertyChange->propertyName() == QByteArrayLiteral("layer")) { m_layer = propertyChange->value().toInt(); m_dirty = true; } else if (propertyChange->propertyName() == QByteArrayLiteral("mipmapLevel")) { m_mipmapLevel = propertyChange->value().toInt(); m_dirty = true; } else if (propertyChange->propertyName() == QByteArrayLiteral("cubeMapFace")) { m_face = static_cast<QAbstractTextureProvider::CubeMapFace>(propertyChange->value().toInt()); m_dirty = true; } else if (propertyChange->propertyName() == QByteArrayLiteral("dataFunctor")) { m_functor = propertyChange->value().value<QTextureDataFunctorPtr>(); m_dirty = true; } } if (m_dirty) {// Notify the RenderTexture that we were updated and request it to schedule an update job RenderTexture *txt = m_textureManager->data(m_textureProvider); if (txt != Q_NULLPTR) txt->addToPendingTextureJobs(); } }
RenderTexture* ShowStar::visitNode(DiySaveType type, Node *node) { int index = (int)type; SaveItemTemplate object = SaveItemTemplateTem(WJUtils::stringAddInt("Save_", index, 3).c_str()); //定义一个自定义大小的渲染纹理 float scale = object.scale; const Size &size = node->getContentSize() * scale; RenderTexture *renderTexture = RenderTexture::create(size.width, size.height); renderTexture->setAnchorPoint(Vec2(0.5f, 0.5f)); renderTexture->ignoreAnchorPointForPosition(false); Vec2 ancPoint = node->getAnchorPoint(); float scaleOld = node->getScale(); Vec2 point = node->getPosition(); // 按照高度的比例缩放节点到当前的尺寸 node->setAnchorPoint(Vec2(0.5f, 0.5f)); node->ignoreAnchorPointForPosition(false); node->setScale(scale); renderTexture->beginWithClear(0, 0, 0, 0); node->setPosition(Vec2(size.width / 2, size.height / 2)); node->visit(); renderTexture->end(); Director::getInstance()->getRenderer()->render(); node->setAnchorPoint(ancPoint); node->setPosition(point); node->setScale(scaleOld); return renderTexture; }
RESULT Device::Create(USINT frameWidth, USINT frameHeight, USINT framebufferNum, DeviceAdapter* deviceAdapter) { if(frameWidth<=0) return RESULT::INVALIDARG; if(frameHeight<=0) return RESULT::INVALIDARG; if(framebufferNum<=0) return RESULT::INVALIDARG; if(deviceAdapter==nullptr) return RESULT::INVALIDARG; RESULT re; for(INT i=0; i<framebufferNum; i++) { RenderTexture* rt = new RenderTexture(); if(nullptr == rt) return RESULT::OUTMEMORY; re = rt->Create(frameWidth, frameHeight); if(RESULT::SUCC != re) { RemoveFrameBuffers(); return re; } m_framebuffers.Add_back(rt); } m_front = m_framebuffers.Begin(); m_pDeviceAdapter = deviceAdapter; return RESULT::SUCC; }
void FrameBufferObject::swapTextures() { for(int i=0 ; i<m_textures.size() ; i++) { RenderTexture* tex = m_textures[i].tex; tex->swap(); } }
RenderTexture* RenderTexture::create(int width, int height, GLenum depthType, GLenum wrapMode, GLenum filteringMode, bool isAutoRelease) { RenderTexture* ptr = new(true) RenderTexture(width, height, depthType, wrapMode, filteringMode); if (isAutoRelease) { ptr->autorelease(); } return ptr; }
void ClippingToRenderTextureTest::reproduceBug() { auto director = Director::getInstance(); Size visibleSize = director->getVisibleSize(); Point origin = director->getVisibleOrigin(); // add "HelloWorld" splash screen" auto sprite = Sprite::create("Images/grossini.png"); // position the sprite on the center of the screen sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // add the sprite as a child to this layer this->addChild(sprite, 0); // container node that will contain the clippingNode auto container = Node::create(); container->retain(); auto stencil = DrawNode::create(); Point triangle[3]; triangle[0] = Point(-50, -50); triangle[1] = Point(50, -50); triangle[2] = Point(0, 50); Color4F green(0, 1, 0, 1); stencil->drawPolygon(triangle, 3, green, 0, green); auto clipper = ClippingNode::create(); clipper->setAnchorPoint(Point(0.5, 0.5)); clipper->setPosition( Point(visibleSize.width/2, visibleSize.height/2) ); clipper->setStencil(stencil); clipper->setInverted(true); container->addChild(clipper, 1); auto img = DrawNode::create(); triangle[0] = Point(-200, -200); triangle[1] = Point(200, -200); triangle[2] = Point(0, 200); Color4F red(1, 0, 0, 1); img->drawPolygon(triangle, 3, red, 0, red); clipper->addChild(img); // container rendered on Texture the size of the screen and because Clipping node use stencil buffer so we need to // create RenderTexture with depthStencil format parameter RenderTexture* rt = RenderTexture::create(visibleSize.width, visibleSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8); rt->setPosition(visibleSize.width/2, visibleSize.height/2); this->addChild(rt); rt->begin(); container->visit(); rt->end(); }
virtual void visit(Renderer *renderer, const Mat4& parentTransform, uint32_t parentFlags) override { m_renderTexture->beginWithClear(0, 0, 0, 0); Node::visit(renderer, parentTransform, parentFlags); m_renderTexture->end(); m_renderTexture->getSprite()->setBlendFunc(m_blendFunc); m_renderTexture->setLocalZOrder(getLocalZOrder()); m_renderTexture->visit(renderer, Mat4::IDENTITY, 0); }
MapRender::~MapRender() { for (size_t i = 0; i < MAX_TEX_X; i++) { for (size_t j = 0; j < MAX_TEX_Y; j++) { RenderTexture* tex = _renderTexture[i][j]; if (tex) tex->release(); } } }
virtual bool init() override { Size size = Director::getInstance()->getVisibleSize(); m_renderTexture = RenderTexture::create(size.width, size.height); if (!m_renderTexture) return false; m_renderTexture->retain(); m_renderTexture->setKeepMatrix(true); m_renderTexture->setAnchorPoint(Vec2::ZERO); m_renderTexture->getSprite()->setAnchorPoint(Vec2::ZERO); return Node::init(); }
RenderTexture * RenderTexture::create(int w, int h) { RenderTexture *ret = new RenderTexture(); if(ret && ret->initWithWidthAndHeight(w, h, Texture2D::PixelFormat::RGBA8888, 0)) { ret->autorelease(); return ret; } CC_SAFE_DELETE(ret); return nullptr; }
void GameLayer::update(float a) { positon = hero->getPosition(); if (positon.x > mapSize.width - winSize.width / 2 - 60) { hero->setState(eNormalRight); isRightKeyDown = false; } mapRun(positon); freshScore(positon); if (isDead) { CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(); CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects(); RenderTexture* renderTexture = RenderTexture::create(WINSIZE.width, WINSIZE.height); renderTexture->retain(); Scene *s = Director::getInstance()->getRunningScene(); renderTexture->begin(); s->visit(); renderTexture->end(); Scene* scene = OverDialog::createScene(renderTexture, true); Director::getInstance()->pushScene(scene); } if (isRightKeyDown) { positon.x += hero->runSpeed; } if (isLeftKeyDown) { positon.x -= hero->runSpeed; } hero->upSpeed -= hero->gravity - hero->groundSurport; positon.y += hero->upSpeed; if (positon.y < 5) { isDead = true; } if (positon.y > 450) positon.y = 450; if (positon.y > mapSize.height - 48) { positon.y = mapSize.height - 48; } hero->setPosition(positon); collisionV(); collisionH(); }
RenderTargetPtr MultiRenderTarget::CreateTexture(const TargetParam& tp) { if (tp.useAsTexture) { RenderTexture* rt = NEX_NEW(RenderTexture()); rt->Create(TextureBase::TEXTURE_2D, tp.format, dimensions.width, dimensions.height, 1); return Assign(rt); } else { RenderBuffer* rt = NEX_NEW(RenderBuffer()); rt->Create(tp.format, dimensions.width, dimensions.height); return Assign(rt); } }
RenderTexture * RenderTexture::create(int w, int h, Texture2D::PixelFormat eFormat) { RenderTexture *ret = new (std::nothrow) RenderTexture(); if(ret && ret->initWithWidthAndHeight(w, h, eFormat)) { ret->autorelease(); return ret; } CC_SAFE_DELETE(ret); return nullptr; }
RenderTexture * RenderTexture::create(int w ,int h, Texture2D::PixelFormat eFormat, GLuint uDepthStencilFormat) { RenderTexture *ret = new RenderTexture(); if(ret && ret->initWithWidthAndHeight(w, h, eFormat, uDepthStencilFormat)) { ret->autorelease(); return ret; } CC_SAFE_DELETE(ret); return nullptr; }
RenderTexture * RenderTexture::create(int w, int h) { RenderTexture *pRet = new RenderTexture(); if(pRet && pRet->initWithWidthAndHeight(w, h, Texture2D::PixelFormat::RGBA8888, 0)) { pRet->autorelease(); return pRet; } CC_SAFE_DELETE(pRet); return NULL; }
Sprite *HelloWorld::spriteWithColor(Color4F color, float texWidth, float texHeight) { RenderTexture *rt = RenderTexture::create(texWidth, texHeight); rt->beginWithClear(color.r, color.g, color.b, color.a); // 3: Draw into the texture // You'll add this later setGLProgramState(cocos2d::GLProgramState::getOrCreateWithGLProgramName(cocos2d::GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP)); _customCommand.init(_globalZOrder); _customCommand.func = [texWidth, texHeight, this]() { float gradientAlpha = 0.7f; Vec2 vertices[4]; Color4F colors[4]; int nVertices = 0; vertices[nVertices] = Vec2 {0, 0}; colors[nVertices++] = Color4F {0, 0, 0, 0 }; vertices[nVertices] = Vec2 {texWidth, 0}; colors[nVertices++] = Color4F {0, 0, 0, 0}; vertices[nVertices] = Vec2 {0, texHeight}; colors[nVertices++] = Color4F {0, 0, 0, gradientAlpha}; vertices[nVertices] = Vec2 {texWidth, texHeight}; colors[nVertices++] = Color4F {0, 0, 0, gradientAlpha}; getGLProgram()->use(); getGLProgram()->setUniformsForBuiltins(); cocos2d::GL::enableVertexAttribs(cocos2d::GL::VERTEX_ATTRIB_FLAG_POSITION | cocos2d::GL::VERTEX_ATTRIB_FLAG_COLOR); glBindBuffer(GL_ARRAY_BUFFER, 0); glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, colors); // glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); cocos2d::GL::blendFunc(CC_BLEND_SRC, CC_BLEND_DST); glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices); }; auto renderer = Director::getInstance()->getRenderer(); renderer->addCommand(&_customCommand); Sprite *noise = Sprite::create("Noise-iphone5hd.png"); noise->setBlendFunc(BlendFunc {GL_DST_COLOR, GL_ZERO}); noise->setPosition(texWidth/2, texHeight/2); noise->visit(); rt->end(); return Sprite::createWithTexture(rt->getSprite()->getTexture()); }
int main(int argc, char* argv[]) { // Get device singleton instance. auto device = RenderDevice::getInstance(); device->init(); device->setQuitOnStart(true); Text text(20.0f); text.setPosition(0, 0); text.setColor(Color::White); text.setString("Hello Text"); // Create the render texture, make it 100x100 RenderTexture renderTexture; renderTexture.create(100, 100); // Start drawing on the texture renderTexture.startFrame(); // Draw the text text.draw(); // End drawing to the texture renderTexture.endFrame(); // Save the render texture to a file renderTexture.save("out.png"); // Main loop while(device->isRunning()) { device->setTargetScreen(Screen::Top); device->clear(Color::Black); device->startFrame(); // Draw the text text.draw(); device->endFrame(); device->setTargetScreen(Screen::Bottom); device->clear(Color::Black); device->startFrame(); device->endFrame(); device->swapBuffers(); } // DON'T FORGET TO CALL THIS OR THE 3DS WILL CRASH AT EXIT device->destroy(); return 0; }
bool ScribbleTouchNode::useTarget(Sprite* sprite){ RenderTexture* rt = RenderTexture::create(sprite->getContentSize().width, sprite->getContentSize().height); rt->begin(); sprite->visit(); rt->end(); Director::getInstance()->getRenderer()->render(); auto image = rt->newImage(); restorePixes = calcute(image); return ScribbleNode::useTarget(sprite); }
CCMask* createMasked(Sprite* mask, Color3B color) { auto size = mask->getContentSize(); RenderTexture* pRenderTexture = RenderTexture::create(size.width, size.height); auto r = color.r / 255.0f; auto g = color.g / 255.0f; auto b = color.b / 255.0f; pRenderTexture->beginWithClear(r, g, b, 1); pRenderTexture->end(); auto sprite = Sprite::createWithTexture(pRenderTexture->getSprite()->getTexture()); sprite->setPosition(Point(mask->getContentSize().width/2, mask->getContentSize().height/2)); CCMask* masked = CCMask::create(mask , sprite); return masked; }
void EndlessScene::pauseCallback(Ref* pSender) { //遍历当前类的所有子节点信息,画入renderTexture中。 //这里类似截图。 Size visibleSize = Director::getInstance()->getVisibleSize(); RenderTexture *renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height + 30); renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); auto scene = EndlessPauseScene::createScene(renderTexture, m_player->totalMoneyNum()); Director::sharedDirector()->pushScene(scene); AudioControl::stopBGMusic(); }
void StartScene::toHelp(){ auto director = Director::getInstance(); RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height); renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); auto scene = pausePopup::createScene(renderTexture, "images/popupBg1.png"); auto layer = pausePopup::create(renderTexture, "images/popupBg1.png"); scene->addChild(layer, 1); layer->contentText = Label::createWithTTF("游戏介绍", "fonts/msyhbd.ttc", 20); layer->contentText->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 20 * 18); layer->menuSprite->addChild(layer->contentText); std::string str = "这是一款横版过关类游戏\n"; str = str + "在游戏中你可以使用各种酷炫的技能消灭敌人,\n拾取强化道具,\n最后干掉boss,通过关卡!\n"; str = str + "基本操作:\nW:跳\nD:前进(向右)\nA:后退(向左)\n点击右侧技能栏选择攻击技能\n"; str = str + "点击屏幕进行攻击\n现在就开始你的战斗之旅吧!\n"; auto infoLabel = Label::createWithTTF(str, "fonts/msyhbd.ttc", 20); infoLabel->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 20 * 19-infoLabel->getContentSize().width/2); layer->menuSprite->addChild(infoLabel); auto backLabel = Label::createWithTTF("返回游戏", "fonts/msyhbd.ttc", 15); backLabel->setColor(Color3B::BLACK); auto backItem = MenuItemLabel::create(backLabel, CC_CALLBACK_0(pausePopup::backToGame, layer)); backItem->setPosition(backItem->getContentSize().width * 3 / 2, 0); layer->menu = Menu::create(backItem, NULL); layer->menu->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 12); layer->menuSprite->addChild(layer->menu, 10); //auto popupScene = Popup::createScene(renderTexture,"images/popupBg.png"); //auto popup = Popup::create("images/popupBg.png"); //this->addChild(popup, 10); //Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f), // ScaleTo::create(0.06f, 1.05f), // ScaleTo::create(0.08f, 0.95f), // ScaleTo::create(0.08f, 1.0f), NULL); //popup->runAction(popupAction); //Director::getInstance()->pause(); director->pushScene(scene); //Director::getInstance()->replaceScene(popupScene); }
void GameLayer::gameOver() { Size visibleSize = Director::getInstance()->getWinSize(); RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8); // Go through all child of Game class and draw in renderTexture // It's like screenshot renderTexture->begin(); Director::getInstance()->getRunningScene()->visit(); renderTexture->end(); Director::getInstance()->getRenderer()->render();// Must add this for version 3.0 or image goes black Director::getInstance()->getTextureCache()->addImage(renderTexture->newImage(), "GameOverImage"); // pause the game, push to scene stack and change to new scene // Don't forget to pop it Director::getInstance()->pushScene(GameOverScene::create()); }
void BasicLevelLayer::lose() { //Node::pause(); auto director = Director::getInstance(); //创建CCRenderTexture,纹理画布大小为窗口大小(1136, 640) RenderTexture *renderTexture = RenderTexture::create(1136, 640); //遍历Game类的所有子节点信息,画入renderTexture中。 //这里类似截图。 renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); //将游戏界面暂停,压入场景堆栈。并切换到GamePause界面 director->pushScene(LoseLayer::createScene(renderTexture)); }
void StartScene::toHelp(){ auto director = Director::getInstance(); RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height); renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); auto popup = Popup::createScene(renderTexture,"images/popupBg.png"); //this->addChild(popup, 10); //Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f), // ScaleTo::create(0.06f, 1.05f), // ScaleTo::create(0.08f, 0.95f), // ScaleTo::create(0.08f, 1.0f), NULL); //popup->runAction(popupAction); director->pushScene(popup); auto str = String::create("±³¾°½éÉÜ£¬ÓÎÏ·²Ù×÷½éÉÜ"); //popup->setContentText(str); }
void GameLayer::pauseCallback(Ref* node) { isRightKeyDown = false; isLeftKeyDown = false; isSpaceKeyDown = false; hero->setState(eNormalRight); CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects(); CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); RenderTexture* renderTexture = RenderTexture::create(WINSIZE.width, WINSIZE.height); renderTexture->retain(); Scene *s = Director::sharedDirector()->getRunningScene(); renderTexture->begin(); s->visit(); renderTexture->end(); Scene* pause = PauseDialog::createScene(renderTexture, true); Director::getInstance()->pushScene(pause); }
bool MapRender::initRenderTexture() { // create a render texture, this is what we are going to draw into int perWidth = WIDTH / MAX_TEX_X; int perHeight = HEIGHT / MAX_TEX_Y; for (size_t i = 0; i < MAX_TEX_X; i++) { for (size_t j = 0; j < MAX_TEX_Y; j++) { RenderTexture* renderTexture = RenderTexture::create(perWidth, perHeight, Texture2D::PixelFormat::RGBA8888); renderTexture->retain(); renderTexture->setPosition(cocos2d::Vec2(perWidth / 2 + i * perWidth, perHeight / 2 + j * perHeight)); this->addChild(renderTexture); _renderTexture[i][j] = renderTexture; } } return true; }
bool MapRender::doRenderTexture(maps::Map* mapa, const std::string& fileImage) { vector<maps::Center *> centers = mapa->GetCenters(); int perWidth = WIDTH / MAX_TEX_X; int perHeight = HEIGHT / MAX_TEX_Y; vector<maps::Center *> unitCenters[MAX_TEX_X][MAX_TEX_Y]; vector<maps::Center *>::iterator center_iter = centers.begin(); for (; center_iter != centers.end(); center_iter++) { int x = (*center_iter)->getRow() * maps::TILE_SIZE / perWidth; int y = (*center_iter)->getCol() * maps::TILE_SIZE / perHeight; unitCenters[x][y].push_back(*center_iter); } for (size_t i = 0; i < MAX_TEX_X; i++) { for (size_t j = 0; j < MAX_TEX_Y; j++) { RenderTexture* render = _renderTexture[i][j]; // begin drawing to the render texture render->begin(); vector<maps::Center *> curCenters = unitCenters[i][j]; center_iter = curCenters.begin(); for (; center_iter != curCenters.end(); center_iter++) { Sprite* tile = Sprite::create(fileImage, TERRAIN_TEXTURE[(int)(*center_iter)->getTerrain()]); tile->setPosition(cocos2d::Vec2((*center_iter)->getPosition().x - i * perWidth, (*center_iter)->getPosition().y - j * perHeight)); tile->setAnchorPoint(cocos2d::Vec2::ZERO); tile->visit(); } // finish drawing and return context back to the screen render->end(); } } return true; }
void RenderTextureImage::updateFromPeer(QNode *peer) { QAbstractTextureImage *textureImage = static_cast<QAbstractTextureImage *>(peer); m_layer = textureImage->layer(); m_mipmapLevel = textureImage->mipmapLevel(); m_face = textureImage->cubeMapFace(); m_functor = textureImage->dataFunctor(); // Notify the RenderTexture that we are one of its TextureImage if (!peer->parentNode()) { qWarning() << "Not QAbstractTextureProvider parent found"; } else { m_textureProviderId = peer->parentNode()->id(); m_textureProvider = m_textureManager->lookupHandle(m_textureProviderId); RenderTexture *txt = m_textureManager->data(m_textureProvider); // Notify the RenderTexture that it has a new RenderTextureImage and needs an update txt->addTextureImageData(m_textureImageManager->lookupHandle(peerUuid())); if (txt != Q_NULLPTR) txt->addToPendingTextureJobs(); } }