summaryrefslogtreecommitdiff
path: root/indra/newview/lldynamictexture.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lldynamictexture.cpp')
-rw-r--r--indra/newview/lldynamictexture.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 5d6081a35c..a93b2b71de 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -125,8 +125,16 @@ BOOL LLViewerDynamicTexture::render()
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::preRender(BOOL clear_depth)
{
- {
- // force rendering to on-screen portion of frame buffer
+ //only images up to 512x512 are supported
+ llassert(mFullHeight <= 512);
+ llassert(mFullWidth <= 512);
+
+ if (gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete())
+ { //using offscreen render target, just use the bottom left corner
+ mOrigin.set(0, 0);
+ }
+ else
+ { // force rendering to on-screen portion of frame buffer
LLCoordScreen window_pos;
gViewerWindow->getWindow()->getPosition( &window_pos );
mOrigin.set(0, gViewerWindow->getWindowHeightRaw() - mFullHeight); // top left corner
@@ -140,9 +148,9 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth)
mOrigin.mY += window_pos.mY;
mOrigin.mY = llmax(mOrigin.mY, 0) ;
}
-
- gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
}
+
+ gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
// Set up camera
LLViewerCamera* camera = LLViewerCamera::getInstance();
mCamera.setOrigin(*camera);
@@ -208,6 +216,13 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
return TRUE;
}
+ bool use_fbo = gGLManager.mHasFramebufferObject && gPipeline.mWaterDis.isComplete();
+
+ if (use_fbo)
+ {
+ gPipeline.mWaterDis.bindTarget();
+ }
+
LLGLSLShader::bindNoShader();
LLVertexBuffer::unbind();
@@ -241,6 +256,11 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
}
}
+ if (use_fbo)
+ {
+ gPipeline.mWaterDis.flush();
+ }
+
return ret;
}