diff --git a/source/Irrlicht/COpenGLDriver.cpp b/source/Irrlicht/COpenGLDriver.cpp index 0cc636c4..437bd148 100644 --- a/source/Irrlicht/COpenGLDriver.cpp +++ b/source/Irrlicht/COpenGLDriver.cpp @@ -2737,9 +2737,12 @@ ITexture* COpenGLDriver::addRenderTargetTexture(const core::dimension2d& si if (rtt) { addTexture(rtt); - ITexture* tex = getDepthTexture(rtt); + ITexture* tex = createDepthTexture(rtt); if (tex) + { static_cast(tex)->attach(rtt); + tex->drop(); + } rtt->drop(); } } @@ -2753,7 +2756,6 @@ ITexture* COpenGLDriver::addRenderTargetTexture(const core::dimension2d& si rtt = addTexture(destSize, name, ECF_A8R8G8B8); if (rtt) { - rtt->grab(); static_cast(rtt)->setIsRenderTarget(true); } } @@ -2912,7 +2914,7 @@ IImage* COpenGLDriver::createScreenShot() //! get depth texture for the given render target texture -ITexture* COpenGLDriver::getDepthTexture(ITexture* texture, bool shared) +ITexture* COpenGLDriver::createDepthTexture(ITexture* texture, bool shared) { if ((texture->getDriverType() != EDT_OPENGL) || (!texture->isRenderTarget())) return 0; diff --git a/source/Irrlicht/COpenGLDriver.h b/source/Irrlicht/COpenGLDriver.h index 44dd32bc..3682a300 100644 --- a/source/Irrlicht/COpenGLDriver.h +++ b/source/Irrlicht/COpenGLDriver.h @@ -338,7 +338,7 @@ namespace video //! Returns the graphics card vendor name. virtual core::stringc getVendorInfo() {return vendorName;} - ITexture* getDepthTexture(ITexture* texture, bool shared=true); + ITexture* createDepthTexture(ITexture* texture, bool shared=true); void removeDepthTexture(ITexture* texture); private: diff --git a/source/Irrlicht/COpenGLTexture.cpp b/source/Irrlicht/COpenGLTexture.cpp index 5ade1862..6130d8a1 100644 --- a/source/Irrlicht/COpenGLTexture.cpp +++ b/source/Irrlicht/COpenGLTexture.cpp @@ -633,7 +633,7 @@ void COpenGLFBODepthTexture::attach(ITexture* renderTex) os::Printer::log("FBO incomplete"); #endif rtt->DepthTexture=this; - renderTex->grab(); + grab(); // grab the depth buffer, not the RTT rtt->unbindRTT(); }