diff options
| author | Dave Parks <davep@lindenlab.com> | 2012-12-18 16:39:48 -0600 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2012-12-18 16:39:48 -0600 | 
| commit | 615af0c556d599b0804874efbde8eba05bef5172 (patch) | |
| tree | 2c3f8ad9b8e52ceb8546284e928ac1d7ec7d8b8c | |
| parent | d2b7857721b789f0483bcf6df6b5baaab2216d6b (diff) | |
MAINT-2150 Fix for super-large ( > 4096 ) snapshots having black borders
| -rw-r--r-- | indra/llrender/llgl.cpp | 3 | ||||
| -rw-r--r-- | indra/llrender/llgl.h | 1 | ||||
| -rw-r--r-- | indra/llrender/llrendertarget.cpp | 4 | ||||
| -rwxr-xr-x | indra/newview/llviewerwindow.cpp | 15 | 
4 files changed, 13 insertions, 10 deletions
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 9e4857b6bc..9d06dd6904 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -1132,7 +1132,8 @@ void LLGLManager::initExtensions()  	// Misc  	glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange);  	glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange); -	 +	glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint*) &mGLMaxTextureSize); +  #if (LL_WINDOWS || LL_LINUX || LL_SOLARIS) && !LL_MESA_HEADLESS  	LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL;  	if (mHasVertexBufferObject) diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index d70e764769..823de9d361 100644 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -147,6 +147,7 @@ public:  	S32 mVRAM; // VRAM in MB  	S32 mGLMaxVertexRange;  	S32 mGLMaxIndexRange; +	S32 mGLMaxTextureSize;  	void getPixelFormat(); // Get the best pixel format diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index c1b96a43da..e35feda2d5 100644 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -109,8 +109,8 @@ 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); +	resx = llmin(resx, (U32) gGLManager.mGLMaxTextureSize); +	resy = llmin(resy, (U32) gGLManager.mGLMaxTextureSize);  	stop_glerror();  	release(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 204215f60f..8bb13cad25 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4247,7 +4247,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	F32 scale_factor = 1.0f ;  	if (!keep_window_aspect || (image_width > window_width) || (image_height > window_height))  	{	 -		if ((image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui) +		if ((image_width <= gGLManager.mGLMaxTextureSize && image_height <= gGLManager.mGLMaxTextureSize) &&  +			(image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui)  		{  			if (scratch_space.allocate(image_width, image_height, GL_RGBA, true, true))  			{ @@ -4274,12 +4275,12 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  		if (!reset_deferred)  		{ -		// if image cropping or need to enlarge the scene, compute a scale_factor -		F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ; -		snapshot_width  = (S32)(ratio * image_width) ; -		snapshot_height = (S32)(ratio * image_height) ; -		scale_factor = llmax(1.0f, 1.0f / ratio) ; -	} +			// if image cropping or need to enlarge the scene, compute a scale_factor +			F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ; +			snapshot_width  = (S32)(ratio * image_width) ; +			snapshot_height = (S32)(ratio * image_height) ; +			scale_factor = llmax(1.0f, 1.0f / ratio) ; +		}  	}  	if (show_ui && scale_factor > 1.f)  | 
