diff options
author | Graham Linden <graham@lindenlab.com> | 2013-09-26 11:44:40 -0700 |
---|---|---|
committer | Graham Linden <graham@lindenlab.com> | 2013-09-26 11:44:40 -0700 |
commit | 0103cac1ddda96fd470238d2c8b73c2cf55b6c12 (patch) | |
tree | a485d28fd9861c41bf9b7117c085bd84617f43de /indra/llrender/llrendertarget.cpp | |
parent | dd4beb695a9c800b37b7c9a19d3ac3f4456012f5 (diff) | |
parent | badb8a945d31aed6f396e7efb521e76083870069 (diff) |
Merge viewer-bear maint RC changes to get this build closer to the RC it will follow
Diffstat (limited to 'indra/llrender/llrendertarget.cpp')
-rwxr-xr-x | indra/llrender/llrendertarget.cpp | 60 |
1 files changed, 23 insertions, 37 deletions
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index c0602d79bd..353e61105a 100755 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -262,7 +262,7 @@ bool LLRenderTarget::addColorAttachment(U32 color_fmt) } #endif - + return true; } @@ -364,56 +364,36 @@ void LLRenderTarget::release() sBytesAllocated -= mResX*mResY*4; } - else if (mFBO) - { + else if (mUseDepth && mFBO) + { //detach shared depth buffer glBindFramebuffer(GL_FRAMEBUFFER, mFBO); - - if (mUseDepth) - { //detach shared depth buffer - if (mStencil) - { //attached as a renderbuffer - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0); - mStencil = false; - } - else - { //attached as a texture - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0); - } - mUseDepth = false; + if (mStencil) + { //attached as a renderbuffer + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0); + mStencil = false; } - } - - // Detach any extra color buffers (e.g. SRGB spec buffers) - // - if (mFBO && (mTex.size() > 1)) - { - S32 z; - for (z = mTex.size() - 1; z >= 1; z--) - { - sBytesAllocated -= mResX*mResY*4; - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+z, LLTexUnit::getInternalType(mUsage), 0, 0); - stop_glerror(); - LLImageGL::deleteTextures(mUsage, mInternalFormat[z], 0, 1, &mTex[z], true); + else + { //attached as a texture + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0); } + mUseDepth = false; } if (mFBO) { glDeleteFramebuffers(1, (GLuint *) &mFBO); - stop_glerror(); mFBO = 0; } if (mTex.size() > 0) { - sBytesAllocated -= mResX*mResY*4; - LLImageGL::deleteTextures(mUsage, mInternalFormat[0], 0, 1, &mTex[0], true); + sBytesAllocated -= mResX*mResY*4*mTex.size(); + LLImageGL::deleteTextures(mUsage, mInternalFormat[0], 0, mTex.size(), &mTex[0], true); + mTex.clear(); + mInternalFormat.clear(); } - - mTex.clear(); - mInternalFormat.clear(); - + mResX = mResY = 0; sBoundTarget = NULL; @@ -495,6 +475,12 @@ U32 LLRenderTarget::getTexture(U32 attachment) const return mTex[attachment]; } +U32 LLRenderTarget::getNumTextures() const +{ + return mTex.size(); +} + + void LLRenderTarget::bindTexture(U32 index, S32 channel) { gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index)); |