diff options
| author | simon <none@none> | 2013-10-24 16:52:08 -0700 | 
|---|---|---|
| committer | simon <none@none> | 2013-10-24 16:52:08 -0700 | 
| commit | 6b9972be57bcab78920726e81700a5a8d8bd456e (patch) | |
| tree | b4fdc9618618cb97a27fb94d66fe55288f035ca0 | |
| parent | 64c5afa196d1692cd0823ccd555f1f7bb32f529d (diff) | |
| parent | 26de32910f99e2522b8e10cf41415b1af2586d5b (diff) | |
Get fix for MAINT-3338
| -rwxr-xr-x | indra/llrender/llrendertarget.cpp | 48 | ||||
| -rwxr-xr-x | indra/newview/lldrawpoolalpha.cpp | 4 | 
2 files changed, 35 insertions, 17 deletions
| diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index b82b370d6e..fe8110904d 100755 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -364,35 +364,55 @@ void LLRenderTarget::release()  		sBytesAllocated -= mResX*mResY*4;  	} -	else if (mUseDepth && mFBO) -	{ //detach shared depth buffer +	else if (mFBO) +	{  		glBindFramebuffer(GL_FRAMEBUFFER, mFBO); -		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; + +		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;  		} -		else -		{ //attached as a texture -			glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0); +	} + +	// 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(1, &mTex[z]);  		} -		mUseDepth = false;  	}  	if (mFBO)  	{  		glDeleteFramebuffers(1, (GLuint *) &mFBO); +		stop_glerror();  		mFBO = 0;  	}  	if (mTex.size() > 0)  	{ -		sBytesAllocated -= mResX*mResY*4*mTex.size(); -		LLImageGL::deleteTextures(mTex.size(), &mTex[0]); +		sBytesAllocated -= mResX*mResY*4; +		LLImageGL::deleteTextures(1, &mTex[0]); +	} +  		mTex.clear();  		mInternalFormat.clear(); -	}  	mResX = mResY = 0; diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 6c5d229dba..e27dc279f4 100755 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -382,9 +382,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  			bool is_particle_or_hud_particle = group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_PARTICLE  													  || group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_HUD_PARTICLE; -			bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow. -				// All particle systems seem to come off the wire with texture entries which claim that they glow.  This is probably a bug in the data.  Suppress. -				!is_particle_or_hud_particle; +			bool draw_glow_for_this_partition = mVertexShaderLevel > 0; // no shaders = no glow.  			static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_GROUP_LOOP("Alpha Group");  			LLFastTimer t(FTM_RENDER_ALPHA_GROUP_LOOP); | 
