diff options
| author | Richard Linden <none@none> | 2012-09-06 11:47:48 -0700 | 
|---|---|---|
| committer | Richard Linden <none@none> | 2012-09-06 11:47:48 -0700 | 
| commit | 371b66a6ef7eb2568e3127c1c59326bce6e26ab8 (patch) | |
| tree | 9154fa799fc37df8cb493f921b41ad79596e903c /indra/llrender | |
| parent | e3b4b3875a6d8c7857ba948a662ace4731913ecf (diff) | |
| parent | 2cdfb170216c798c637081b0e28ec8921f0b777b (diff) | |
Automated merge with http://bitbucket.org/lindenlab/viewer-development
Diffstat (limited to 'indra/llrender')
| -rw-r--r-- | indra/llrender/llgl.cpp | 2 | ||||
| -rw-r--r-- | indra/llrender/llrendertarget.cpp | 34 | ||||
| -rw-r--r-- | indra/llrender/llrendertarget.h | 5 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 27 | 
4 files changed, 19 insertions, 49 deletions
| diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 0b56b3889c..9e4857b6bc 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -44,7 +44,6 @@  #include "llmath.h"  #include "m4math.h"  #include "llstring.h" -#include "llmemtype.h"  #include "llstacktrace.h"  #include "llglheaders.h" @@ -2323,7 +2322,6 @@ void LLGLNamePool::release(GLuint name)  //static  void LLGLNamePool::upkeepPools()  { -	LLMemType mt(LLMemType::MTYPE_UPKEEP_POOLS);  	for (tracker_t::instance_iter iter = beginInstances(); iter != endInstances(); ++iter)  	{  		LLGLNamePool & pool = *iter; diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index cc5c232380..cd1c532243 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -51,11 +51,13 @@ void check_framebuffer_status()  }  bool LLRenderTarget::sUseFBO = false; +U32 LLRenderTarget::sCurFBO = 0;  LLRenderTarget::LLRenderTarget() :  	mResX(0),  	mResY(0),  	mFBO(0), +	mPreviousFBO(0),  	mDepth(0),  	mStencil(0),  	mUseDepth(false), @@ -107,6 +109,9 @@ void LLRenderTarget::resize(U32 resx, U32 resy, U32 color_fmt)  bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)  { +	resx = llmin(resx, (U32) 4096); +	resy = llmin(resy, (U32) 4096); +  	stop_glerror();  	release();  	stop_glerror(); @@ -146,7 +151,7 @@ bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, boo  				glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), mDepth, 0);  				stop_glerror();  			} -			glBindFramebuffer(GL_FRAMEBUFFER, 0); +			glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		}  		stop_glerror(); @@ -224,7 +229,7 @@ bool LLRenderTarget::addColorAttachment(U32 color_fmt)  		check_framebuffer_status(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  	}  	mTex.push_back(tex); @@ -313,7 +318,7 @@ void LLRenderTarget::shareDepthBuffer(LLRenderTarget& target)  		check_framebuffer_status(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		target.mUseDepth = true;  	} @@ -376,9 +381,13 @@ void LLRenderTarget::bindTarget()  {  	if (mFBO)  	{ +		mPreviousFBO = sCurFBO; +  		stop_glerror();  		glBindFramebuffer(GL_FRAMEBUFFER, mFBO); +		sCurFBO = mFBO; +  		stop_glerror();  		if (gGLManager.mHasDrawBuffers)  		{ //setup multiple render targets @@ -404,16 +413,6 @@ void LLRenderTarget::bindTarget()  	sBoundTarget = this;  } -// static -void LLRenderTarget::unbindTarget() -{ -	if (gGLManager.mHasFramebufferObject) -	{ -		glBindFramebuffer(GL_FRAMEBUFFER, 0); -	} -	sBoundTarget = NULL; -} -  void LLRenderTarget::clear(U32 mask_in)  {  	U32 mask = GL_COLOR_BUFFER_BIT; @@ -479,7 +478,8 @@ void LLRenderTarget::flush(bool fetch_depth)  	else  	{  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, mPreviousFBO); +		sCurFBO = mPreviousFBO;  		stop_glerror();  	}  } @@ -509,7 +509,7 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0,  		stop_glerror();  		glCopyTexSubImage2D(LLTexUnit::getInternalType(mUsage), 0, srcX0, srcY0, dstX0, dstY0, dstX1, dstY1);  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		stop_glerror();  	}  	else @@ -526,7 +526,7 @@ void LLRenderTarget::copyContents(LLRenderTarget& source, S32 srcX0, S32 srcY0,  		stop_glerror();  		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		stop_glerror();  	}  } @@ -552,7 +552,7 @@ void LLRenderTarget::copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0  		stop_glerror();  		glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);  		stop_glerror(); -		glBindFramebuffer(GL_FRAMEBUFFER, 0); +		glBindFramebuffer(GL_FRAMEBUFFER, sCurFBO);  		stop_glerror();  	}  } diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h index e1a51304f1..cf15f66d31 100644 --- a/indra/llrender/llrendertarget.h +++ b/indra/llrender/llrendertarget.h @@ -63,6 +63,7 @@ public:  	//whether or not to use FBO implementation  	static bool sUseFBO;   	static U32 sBytesAllocated; +	static U32 sCurFBO;  	LLRenderTarget();  	~LLRenderTarget(); @@ -96,9 +97,6 @@ public:  	//applies appropriate viewport  	void bindTarget(); -	//unbind target for rendering -	static void unbindTarget(); -	  	//clear render targer, clears depth buffer if present,  	//uses scissor rect if in copy-to-texture mode  	void clear(U32 mask = 0xFFFFFFFF); @@ -148,6 +146,7 @@ protected:  	std::vector<U32> mTex;  	std::vector<U32> mInternalFormat;  	U32 mFBO; +	U32 mPreviousFBO;  	U32 mDepth;  	bool mStencil;  	bool mUseDepth; diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 28a14b23b9..11b2681e52 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -31,7 +31,6 @@  #include "llvertexbuffer.h"  // #include "llrender.h"  #include "llglheaders.h" -#include "llmemtype.h"  #include "llrender.h"  #include "llvector4a.h"  #include "llshadermgr.h" @@ -858,7 +857,6 @@ void LLVertexBuffer::unbind()  //static  void LLVertexBuffer::cleanupClass()  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_CLEANUP_CLASS);  	unbind();  	sStreamIBOPool.cleanup(); @@ -939,8 +937,6 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :  	mMappable(false),  	mFence(NULL)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_CONSTRUCTOR); -  	mMappable = (mUsage == GL_DYNAMIC_DRAW_ARB && !sDisableVBOMapping);  	//zero out offsets @@ -1000,7 +996,6 @@ S32 LLVertexBuffer::getSize() const  //virtual  LLVertexBuffer::~LLVertexBuffer()  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_DESTRUCTOR);  	destroyGLBuffer();  	destroyGLIndices(); @@ -1120,8 +1115,6 @@ void LLVertexBuffer::releaseIndices()  void LLVertexBuffer::createGLBuffer(U32 size)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_CREATE_VERTICES); -	  	if (mGLBuffer)  	{  		destroyGLBuffer(); @@ -1151,8 +1144,6 @@ void LLVertexBuffer::createGLBuffer(U32 size)  void LLVertexBuffer::createGLIndices(U32 size)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_CREATE_INDICES); -	  	if (mGLIndices)  	{  		destroyGLIndices(); @@ -1187,7 +1178,6 @@ void LLVertexBuffer::createGLIndices(U32 size)  void LLVertexBuffer::destroyGLBuffer()  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_DESTROY_BUFFER);  	if (mGLBuffer)  	{  		if (mMappedDataUsingVBOs) @@ -1208,7 +1198,6 @@ void LLVertexBuffer::destroyGLBuffer()  void LLVertexBuffer::destroyGLIndices()  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_DESTROY_INDICES);  	if (mGLIndices)  	{  		if (mMappedIndexDataUsingVBOs) @@ -1229,8 +1218,6 @@ void LLVertexBuffer::destroyGLIndices()  void LLVertexBuffer::updateNumVerts(S32 nverts)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_UPDATE_VERTS); -  	llassert(nverts >= 0);  	if (nverts > 65536) @@ -1253,8 +1240,6 @@ void LLVertexBuffer::updateNumVerts(S32 nverts)  void LLVertexBuffer::updateNumIndices(S32 nindices)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_UPDATE_INDICES); -  	llassert(nindices >= 0);  	U32 needed_size = sizeof(U16) * nindices; @@ -1271,8 +1256,6 @@ void LLVertexBuffer::updateNumIndices(S32 nindices)  void LLVertexBuffer::allocateBuffer(S32 nverts, S32 nindices, bool create)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_ALLOCATE_BUFFER); -	  	stop_glerror();  	if (nverts < 0 || nindices < 0 || @@ -1423,8 +1406,6 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices)  	llassert(newnverts >= 0);  	llassert(newnindices >= 0); -	LLMemType mt2(LLMemType::MTYPE_VERTEX_RESIZE_BUFFER); -	  	updateNumVerts(newnverts);		  	updateNumIndices(newnindices); @@ -1472,7 +1453,6 @@ static LLFastTimer::DeclareTimer FTM_VBO_MAP_BUFFER("VBO Map");  volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_range)  {  	bindGLBuffer(true); -	LLMemType mt2(LLMemType::MTYPE_VERTEX_MAP_BUFFER);  	if (mFinal)  	{  		llerrs << "LLVertexBuffer::mapVeretxBuffer() called on a finalized buffer." << llendl; @@ -1521,7 +1501,6 @@ volatile U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, boo  		if (!mVertexLocked)  		{ -			LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_VERTICES);  			mVertexLocked = true;  			sMappedCount++;  			stop_glerror();	 @@ -1652,7 +1631,6 @@ static LLFastTimer::DeclareTimer FTM_VBO_MAP_INDEX("IBO Map");  volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_MAP_BUFFER);  	bindGLIndices(true);  	if (mFinal)  	{ @@ -1699,8 +1677,6 @@ volatile U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range  		if (!mIndexLocked)  		{ -			LLMemType mt_v(LLMemType::MTYPE_VERTEX_MAP_BUFFER_INDICES); -  			mIndexLocked = true;  			sMappedCount++;  			stop_glerror();	 @@ -1823,7 +1799,6 @@ static LLFastTimer::DeclareTimer FTM_IBO_FLUSH_RANGE("Flush IBO Range");  void LLVertexBuffer::unmapBuffer()  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_UNMAP_BUFFER);  	if (!useVBOs())  	{  		return; //nothing to unmap @@ -2177,7 +2152,6 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  {  	flush(); -	LLMemType mt2(LLMemType::MTYPE_VERTEX_SET_BUFFER);  	//set up pointers if the data mask is different ...  	bool setup = (sLastMask != data_mask); @@ -2319,7 +2293,6 @@ void LLVertexBuffer::setBuffer(U32 data_mask)  // virtual (default)  void LLVertexBuffer::setupVertexBuffer(U32 data_mask)  { -	LLMemType mt2(LLMemType::MTYPE_VERTEX_SETUP_VERTEX_BUFFER);  	stop_glerror();  	volatile U8* base = useVBOs() ? (U8*) mAlignedOffset : mMappedData; | 
