bool DeferredShadingMSAA::UpdateRenderTargetMode() { // This method can be called before we have a valid size for our render targets. // In that case, simply return and wait for a call with valid values. if (m_imageWidth == 0 || m_imageHeight == 0) { return false; } // Determine what frame buffer mode we need to be in, and if we're not // currently in that mode, destroy the current render targets and // initialize the new ones. if (m_approach == APPROACH_NOMSAA) { if (m_currentRTMode != RTMODE_NOMSAA) { DestroyRenderTargets(); InitRenderTargets_NoMSAA(); } } else if (m_bUsePerSamplePixelShader) { if (m_currentRTMode != RTMODE_PERSAMPLE) { DestroyRenderTargets(); InitRenderTargets_PerSampleShading(); } } else { if (m_currentRTMode != RTMODE_PERPIXEL) { DestroyRenderTargets(); InitRenderTargets_PerPixelShading(); } } return true; }
void DeferredShadingMSAA::reshape(int32_t width, int32_t height) { // Avoid destroying render targets unnecessarily. Only do it if our dimensions have actually changed. if (m_imageWidth != width || m_imageHeight != height) { m_imageWidth = width; m_imageHeight = height; // Destroy the current render targets and let them get recreated on our next draw DestroyRenderTargets(); } glBindFramebuffer(GL_FRAMEBUFFER, getMainFBO()); glViewport(0, 0, m_imageWidth, m_imageHeight); }
/** * Shutdown the render manager */ bool RenderManager::Destroy() { if(unitSphereMesh) delete unitSphereMesh; if(unitConeMesh) delete unitConeMesh; if(fullScreenVB) gRenderAPI->DestroyVertexBuffer(fullScreenVB); if(fullScreenIB) gRenderAPI->DestroyIndexBuffer(fullScreenIB); if(defaultTexture) gRenderAPI->DestroyTexture(defaultTexture); cachedSamplers.clear(); DestroyFonts(); DestroyShaders(); DestroyRenderTargets(); gRenderAPI->Destroy(); return true; }