diff --git a/src/DepthBuffer.cpp b/src/DepthBuffer.cpp index bb181b0b..c8d22ab9 100644 --- a/src/DepthBuffer.cpp +++ b/src/DepthBuffer.cpp @@ -282,6 +282,7 @@ void DepthBufferList::removeBuffer(u32 _address ) { for (DepthBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter) if (iter->m_address == _address) { + frameBufferList().clearDepthBuffer(&(*iter)); m_list.erase(iter); return; } diff --git a/src/FrameBuffer.cpp b/src/FrameBuffer.cpp index 6d53715c..3e0f491e 100644 --- a/src/FrameBuffer.cpp +++ b/src/FrameBuffer.cpp @@ -716,6 +716,15 @@ void FrameBufferList::attachDepthBuffer() assert(checkFBO()); } +void FrameBufferList::clearDepthBuffer(DepthBuffer * _pDepthBuffer) +{ + for (FrameBuffers::iterator iter = m_list.begin(); iter != m_list.end(); ++iter) { + if (iter->m_pDepthBuffer == _pDepthBuffer) { + iter->m_pDepthBuffer = NULL; + } + } +} + void FrameBuffer_Init() { frameBufferList().init(); diff --git a/src/FrameBuffer.h b/src/FrameBuffer.h index 44326e5f..e7983c64 100644 --- a/src/FrameBuffer.h +++ b/src/FrameBuffer.h @@ -66,6 +66,7 @@ public: void removeBuffer(u32 _address); void removeBuffers(u32 _width); void attachDepthBuffer(); + void clearDepthBuffer(DepthBuffer * _pDepthBuffer); FrameBuffer * findBuffer(u32 _startAddress); FrameBuffer * findTmpBuffer(u32 _address); FrameBuffer * getCurrent() const {return m_pCurrent;}