void GameStateManager::nextState() { // delete the old game states. if( m_gameStatePrev != m_gameStateCurr && m_gameStatePrev != m_gameStateNext ) destroyState(m_gameStatePrev); m_gameStatePrev = m_gameStateCurr; m_gameStateCurr = m_gameStateNext; }
/// Destructor. ~StateContainer() { // Destroy the allocated states. for(StateMap::iterator it = _states.begin(); it != _states.end(); ++it) { destroyState(it->second); it->second = 0; } // Clear the map. _states.clear(); }
void egDestroyDevice(EGDevice *pDeviceID) { SEGDevice *pDevice = devices + (*pDeviceID - 1); if (pDevice->bIsInBatch) return; // Textures for (uint32_t i = 0; i < pDevice->textureCount; ++i) { SEGTexture2D *pTexture = pDevice->textures + i; destroyTexture(pTexture); } free(pDevice->textures); for (uint32_t i = 0; i < 3; ++i) { SEGTexture2D *pTexture = pDevice->pDefaultTextureMaps + i; destroyTexture(pTexture); } destroyTexture(&pDevice->transparentBlackTexture); // Render targets for (uint32_t i = 0; i < 4; ++i) { SEGRenderTarget2D *pRenderTarget = pDevice->gBuffer + i; destroyRenderTarget(pRenderTarget); } for (uint32_t i = 0; i < 8; ++i) { for (uint32_t k = 0; k < 2; ++k) { SEGRenderTarget2D *pRenderTarget = &pDevice->blurBuffers[i][k]; destroyRenderTarget(pRenderTarget); } } destroyRenderTarget(&pBoundDevice->accumulationBuffer); // VBO for (int i = 0; i < 8; ++i) { if (pDevice->pVertexBufferResources[i]) pDevice->pVertexBufferResources[i]->lpVtbl->Release(pDevice->pVertexBufferResources[i]); if (pDevice->pVertexBuffers[i]) pDevice->pVertexBuffers[i]->lpVtbl->Release(pDevice->pVertexBuffers[i]); } if (pDevice->pCurrentBatchVertices) free(pDevice->pCurrentBatchVertices); // Constant buffers if (pDevice->pCBModel) pDevice->pCBModel->lpVtbl->Release(pDevice->pCBModel); if (pDevice->pCBViewProj) pDevice->pCBViewProj->lpVtbl->Release(pDevice->pCBViewProj); if (pDevice->pCBInvViewProj) pDevice->pCBInvViewProj->lpVtbl->Release(pDevice->pCBInvViewProj); if (pDevice->pCBAlphaTestRef) pDevice->pCBAlphaTestRef->lpVtbl->Release(pDevice->pCBAlphaTestRef); if (pDevice->pCBOmni) pDevice->pCBOmni->lpVtbl->Release(pDevice->pCBOmni); if (pDevice->pCBBlurSpread) pDevice->pCBBlurSpread->lpVtbl->Release(pDevice->pCBBlurSpread); // Input layouts if (pDevice->pInputLayout) pDevice->pInputLayout->lpVtbl->Release(pDevice->pInputLayout); if (pDevice->pInputLayoutPassThrough) pDevice->pInputLayout->lpVtbl->Release(pDevice->pInputLayoutPassThrough); // Shaders if (pDevice->pVS) pDevice->pVS->lpVtbl->Release(pDevice->pVS); for (int i = 0; i < 18; ++i) { if (pDevice->pPSes[i]) pDevice->pPSes[i]->lpVtbl->Release(pDevice->pPSes[i]); } if (pDevice->pPSPassThrough) pDevice->pPSPassThrough->lpVtbl->Release(pDevice->pPSPassThrough); if (pDevice->pVSPassThrough) pDevice->pVSPassThrough->lpVtbl->Release(pDevice->pVSPassThrough); if (pDevice->pPSAmbient) pDevice->pPSAmbient->lpVtbl->Release(pDevice->pPSAmbient); if (pDevice->pPSOmni) pDevice->pPSOmni->lpVtbl->Release(pDevice->pPSOmni); if (pDevice->pPSLDR) pDevice->pPSLDR->lpVtbl->Release(pDevice->pPSLDR); if (pDevice->pPSBlurH) pDevice->pPSBlurH->lpVtbl->Release(pDevice->pPSBlurH); if (pDevice->pPSBlurV) pDevice->pPSBlurV->lpVtbl->Release(pDevice->pPSBlurV); for (int i = 0; i < 2; ++i) { if (pDevice->pPSPostProcess[i]) pDevice->pPSPostProcess[i]->lpVtbl->Release(pDevice->pPSPostProcess[i]); } // States for (uint32_t i = 0; i < pDevice->stateCount; ++i) { SEGState *pState = pDevice->states + i; destroyState(pState); } free(pDevice->states); // Device if (pDevice->pDepthStencilView) pDevice->pDepthStencilView->lpVtbl->Release(pDevice->pDepthStencilView); if (pDevice->pRenderTargetView) pDevice->pRenderTargetView->lpVtbl->Release(pDevice->pRenderTargetView); if (pDevice->pDeviceContext) pDevice->pDeviceContext->lpVtbl->Release(pDevice->pDeviceContext); if (pDevice->pDevice) pDevice->pDevice->lpVtbl->Release(pDevice->pDevice); if (pDevice->pSwapChain) pDevice->pSwapChain->lpVtbl->Release(pDevice->pSwapChain); memset(pDevice, 0, sizeof(SEGDevice)); *pDeviceID = 0; }