RenderFormatToken::~RenderFormatToken() { GFXTextureManager::removeEventDelegate(this, &RenderFormatToken::_onTextureEvent); GFXDevice::getDeviceEventSignal().remove(this, &RenderFormatToken::_handleGFXEvent); _teardownTargets(); }
RenderTexTargetBinManager::~RenderTexTargetBinManager() { _teardownTargets(); GFXTextureManager::removeEventDelegate( this, &RenderTexTargetBinManager::_onTextureEvent ); GFXDevice::getDeviceEventSignal().remove(this, &RenderTexTargetBinManager::_handleGFXEvent); }
void GuiOffscreenCanvas::_setupTargets() { _teardownTargets(); if (!mTarget.isValid()) { mTarget = GFX->allocRenderToTextureTarget(); } // Update color if (!mTargetTexture.isValid() || mTargetSize != mTargetTexture.getWidthHeight()) { mTargetTexture.set( mTargetSize.x, mTargetSize.y, mTargetFormat, &GFXDefaultRenderTargetProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ), 1, 0 ); } // Update depth if needed if (mUseDepth && (!mTargetDepth.isValid() || mTargetSize != mTargetDepth.getWidthHeight())) { mTargetDepth.set( mTargetSize.x, mTargetSize.y, GFXFormatD24S8, &GFXDefaultZTargetProfile, avar( "%s() - (line %d)", __FUNCTION__, __LINE__ ), 1, 0 ); mTarget->attachTexture( GFXTextureTarget::RenderSlot(GFXTextureTarget::DepthStencil), mTargetDepth ); } mTarget->attachTexture( GFXTextureTarget::RenderSlot(GFXTextureTarget::Color0), mTargetTexture ); mNamedTarget.setTexture(0, mTargetTexture); }
void RenderFormatToken::_onTextureEvent( GFXTexCallbackCode code ) { if(code == GFXZombify) { _teardownTargets(); mTargetUpdatePending = true; } }
void RenderTexTargetBinManager::_onTextureEvent( GFXTexCallbackCode code ) { switch(code) { case GFXZombify: _teardownTargets(); break; case GFXResurrect: _setupTargets(); break; } }
void GuiOffscreenCanvas::_onTextureEvent( GFXTexCallbackCode code ) { switch(code) { case GFXZombify: _teardownTargets(); break; case GFXResurrect: _setupTargets(); break; } }
bool RenderTexTargetBinManager::_setupTargets() { _teardownTargets(); mTargetChain = new GFXTextureTargetRef[mTargetChainLength]; mTargetChainTextures = new GFXTexHandle*[mTargetChainLength]; for( U32 i = 0; i < mTargetChainLength; i++ ) mTargetChainTextures[i] = new GFXTexHandle[mNumRenderTargets]; mTargetChainIdx = 0; mTargetSize = Point2I::Zero; return true; }
void GuiOffscreenCanvas::onRemove() { GFXTextureManager::removeEventDelegate( this, &GuiOffscreenCanvas::_onTextureEvent ); _teardownTargets(); U32 idx = sList.find_next(this); if (idx != (U32)-1) { sList.erase(idx); } mTarget = NULL; mTargetTexture = NULL; mTargetDepth = NULL; Parent::onRemove(); }