summaryrefslogtreecommitdiff
path: root/indra/newview/lldynamictexture.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2024-05-14 21:02:28 -0400
committerNat Goodspeed <nat@lindenlab.com>2024-05-14 21:02:28 -0400
commit094dcc07f8c1d90ae723dbe60eddacb90a09eae8 (patch)
treee750942e5f22ed677b543bd49509c2a7cdc5ce56 /indra/newview/lldynamictexture.cpp
parentd4043d3b011c32eb503c43c551872f9c24d7344f (diff)
parent38c2a5bde985a6a8a96d912d432f8bdf7e5b60be (diff)
Merge DRTVWR-591-maint-X to main on promotion of secondlife/viewer #705: Maintenance X
Diffstat (limited to 'indra/newview/lldynamictexture.cpp')
-rw-r--r--indra/newview/lldynamictexture.cpp302
1 files changed, 151 insertions, 151 deletions
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index 425acd3392..a27a98ff2c 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -1,25 +1,25 @@
-/**
+/**
* @file lldynamictexture.cpp
* @brief Implementation of LLViewerDynamicTexture class
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
- *
+ *
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
- *
+ *
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
- *
+ *
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -30,7 +30,7 @@
// Linden library includes
#include "llglheaders.h"
-#include "llwindow.h" // getPosition()
+#include "llwindow.h" // getPosition()
// Viewer includes
#include "llviewerwindow.h"
@@ -50,16 +50,16 @@ S32 LLViewerDynamicTexture::sNumRenders = 0;
//-----------------------------------------------------------------------------
// LLViewerDynamicTexture()
//-----------------------------------------------------------------------------
-LLViewerDynamicTexture::LLViewerDynamicTexture(S32 width, S32 height, S32 components, EOrder order, BOOL clamp) :
- LLViewerTexture(width, height, components, FALSE),
- mClamp(clamp)
+LLViewerDynamicTexture::LLViewerDynamicTexture(S32 width, S32 height, S32 components, EOrder order, BOOL clamp) :
+ LLViewerTexture(width, height, components, FALSE),
+ mClamp(clamp)
{
- llassert((1 <= components) && (components <= 4));
+ llassert((1 <= components) && (components <= 4));
- generateGLTexture();
+ generateGLTexture();
- llassert( 0 <= order && order < ORDER_COUNT );
- LLViewerDynamicTexture::sInstances[ order ].insert(this);
+ llassert( 0 <= order && order < ORDER_COUNT );
+ LLViewerDynamicTexture::sInstances[ order ].insert(this);
}
//-----------------------------------------------------------------------------
@@ -67,16 +67,16 @@ LLViewerDynamicTexture::LLViewerDynamicTexture(S32 width, S32 height, S32 compon
//-----------------------------------------------------------------------------
LLViewerDynamicTexture::~LLViewerDynamicTexture()
{
- for( S32 order = 0; order < ORDER_COUNT; order++ )
- {
- LLViewerDynamicTexture::sInstances[order].erase(this); // will fail in all but one case.
- }
+ for( S32 order = 0; order < ORDER_COUNT; order++ )
+ {
+ LLViewerDynamicTexture::sInstances[order].erase(this); // will fail in all but one case.
+ }
}
-//virtual
+//virtual
S8 LLViewerDynamicTexture::getType() const
{
- return LLViewerTexture::DYNAMIC_TEXTURE ;
+ return LLViewerTexture::DYNAMIC_TEXTURE ;
}
//-----------------------------------------------------------------------------
@@ -84,25 +84,25 @@ S8 LLViewerDynamicTexture::getType() const
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::generateGLTexture()
{
- LLViewerTexture::generateGLTexture() ;
- generateGLTexture(-1, 0, 0, FALSE);
+ LLViewerTexture::generateGLTexture() ;
+ generateGLTexture(-1, 0, 0, FALSE);
}
void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format, BOOL swap_bytes)
{
- if (mComponents < 1 || mComponents > 4)
- {
- LL_ERRS() << "Bad number of components in dynamic texture: " << mComponents << LL_ENDL;
- }
-
- LLPointer<LLImageRaw> raw_image = new LLImageRaw(mFullWidth, mFullHeight, mComponents);
- if (internal_format >= 0)
- {
- setExplicitFormat(internal_format, primary_format, type_format, swap_bytes);
- }
- createGLTexture(0, raw_image, 0, TRUE, LLGLTexture::DYNAMIC_TEX);
- setAddressMode((mClamp) ? LLTexUnit::TAM_CLAMP : LLTexUnit::TAM_WRAP);
- mGLTexturep->setGLTextureCreated(false);
+ if (mComponents < 1 || mComponents > 4)
+ {
+ LL_ERRS() << "Bad number of components in dynamic texture: " << mComponents << LL_ENDL;
+ }
+
+ LLPointer<LLImageRaw> raw_image = new LLImageRaw(mFullWidth, mFullHeight, mComponents);
+ if (internal_format >= 0)
+ {
+ setExplicitFormat(internal_format, primary_format, type_format, swap_bytes);
+ }
+ createGLTexture(0, raw_image, 0, TRUE, LLGLTexture::DYNAMIC_TEX);
+ setAddressMode((mClamp) ? LLTexUnit::TAM_CLAMP : LLTexUnit::TAM_WRAP);
+ mGLTexturep->setGLTextureCreated(false);
}
//-----------------------------------------------------------------------------
@@ -110,7 +110,7 @@ void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum
//-----------------------------------------------------------------------------
BOOL LLViewerDynamicTexture::render()
{
- return FALSE;
+ return FALSE;
}
//-----------------------------------------------------------------------------
@@ -119,22 +119,22 @@ BOOL LLViewerDynamicTexture::render()
void LLViewerDynamicTexture::preRender(BOOL clear_depth)
{
//use the bottom left corner
- mOrigin.set(0, 0);
+ mOrigin.set(0, 0);
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
- // Set up camera
- LLViewerCamera* camera = LLViewerCamera::getInstance();
- mCamera.setOrigin(*camera);
- mCamera.setAxes(*camera);
- mCamera.setAspect(camera->getAspect());
- mCamera.setView(camera->getView());
- mCamera.setNear(camera->getNear());
-
- glViewport(mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
- if (clear_depth)
- {
- glClear(GL_DEPTH_BUFFER_BIT);
- }
+ // Set up camera
+ LLViewerCamera* camera = LLViewerCamera::getInstance();
+ mCamera.setOrigin(*camera);
+ mCamera.setAxes(*camera);
+ mCamera.setAspect(camera->getAspect());
+ mCamera.setView(camera->getView());
+ mCamera.setNear(camera->getNear());
+
+ glViewport(mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
+ if (clear_depth)
+ {
+ glClear(GL_DEPTH_BUFFER_BIT);
+ }
}
//-----------------------------------------------------------------------------
@@ -142,36 +142,36 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth)
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::postRender(BOOL success)
{
- {
- if (success)
- {
- if(mGLTexturep.isNull())
- {
- generateGLTexture() ;
- }
- else if(!mGLTexturep->getHasGLTexture())
- {
- generateGLTexture() ;
- }
- else if(mGLTexturep->getDiscardLevel() != 0)//do not know how it happens, but regenerate one if it does.
- {
- generateGLTexture() ;
- }
-
- success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
- }
- }
-
- // restore viewport
- gViewerWindow->setup2DViewport();
-
- // restore camera
- LLViewerCamera* camera = LLViewerCamera::getInstance();
- camera->setOrigin(mCamera);
- camera->setAxes(mCamera);
- camera->setAspect(mCamera.getAspect());
- camera->setViewNoBroadcast(mCamera.getView());
- camera->setNear(mCamera.getNear());
+ {
+ if (success)
+ {
+ if(mGLTexturep.isNull())
+ {
+ generateGLTexture() ;
+ }
+ else if(!mGLTexturep->getHasGLTexture())
+ {
+ generateGLTexture() ;
+ }
+ else if(mGLTexturep->getDiscardLevel() != 0)//do not know how it happens, but regenerate one if it does.
+ {
+ generateGLTexture() ;
+ }
+
+ success = mGLTexturep->setSubImageFromFrameBuffer(0, 0, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight);
+ }
+ }
+
+ // restore viewport
+ gViewerWindow->setup2DViewport();
+
+ // restore camera
+ LLViewerCamera* camera = LLViewerCamera::getInstance();
+ camera->setOrigin(mCamera);
+ camera->setAxes(mCamera);
+ camera->setAspect(mCamera.getAspect());
+ camera->setViewNoBroadcast(mCamera.getView());
+ camera->setNear(mCamera.getNear());
}
//-----------------------------------------------------------------------------
@@ -181,62 +181,62 @@ void LLViewerDynamicTexture::postRender(BOOL success)
//-----------------------------------------------------------------------------
BOOL LLViewerDynamicTexture::updateAllInstances()
{
- sNumRenders = 0;
- if (gGLManager.mIsDisabled)
- {
- return TRUE;
- }
+ sNumRenders = 0;
+ if (gGLManager.mIsDisabled)
+ {
+ return TRUE;
+ }
- bool use_fbo = gPipeline.mBake.isComplete() && !gGLManager.mIsAMD;
+ bool use_fbo = gPipeline.mBake.isComplete() && !gGLManager.mIsAMD;
- if (use_fbo)
- {
- gPipeline.mBake.bindTarget();
+ if (use_fbo)
+ {
+ gPipeline.mBake.bindTarget();
gPipeline.mBake.clear();
- }
-
- LLGLSLShader::unbind();
- LLVertexBuffer::unbind();
-
- BOOL result = FALSE;
- BOOL ret = FALSE ;
- for( S32 order = 0; order < ORDER_COUNT; order++ )
- {
- for (instance_list_t::iterator iter = LLViewerDynamicTexture::sInstances[order].begin();
- iter != LLViewerDynamicTexture::sInstances[order].end(); ++iter)
- {
- LLViewerDynamicTexture *dynamicTexture = *iter;
- if (dynamicTexture->needsRender())
- {
- glClear(GL_DEPTH_BUFFER_BIT);
- gDepthDirty = TRUE;
-
- gGL.color4f(1,1,1,1);
+ }
+
+ LLGLSLShader::unbind();
+ LLVertexBuffer::unbind();
+
+ BOOL result = FALSE;
+ BOOL ret = FALSE ;
+ for( S32 order = 0; order < ORDER_COUNT; order++ )
+ {
+ for (instance_list_t::iterator iter = LLViewerDynamicTexture::sInstances[order].begin();
+ iter != LLViewerDynamicTexture::sInstances[order].end(); ++iter)
+ {
+ LLViewerDynamicTexture *dynamicTexture = *iter;
+ if (dynamicTexture->needsRender())
+ {
+ glClear(GL_DEPTH_BUFFER_BIT);
+ gDepthDirty = TRUE;
+
+ gGL.color4f(1,1,1,1);
dynamicTexture->setBoundTarget(use_fbo ? &gPipeline.mBake : nullptr);
- dynamicTexture->preRender(); // Must be called outside of startRender()
- result = FALSE;
- if (dynamicTexture->render())
- {
- ret = TRUE ;
- result = TRUE;
- sNumRenders++;
- }
- gGL.flush();
- LLVertexBuffer::unbind();
- dynamicTexture->setBoundTarget(nullptr);
- dynamicTexture->postRender(result);
- }
- }
- }
-
- if (use_fbo)
- {
- gPipeline.mBake.flush();
- }
+ dynamicTexture->preRender(); // Must be called outside of startRender()
+ result = FALSE;
+ if (dynamicTexture->render())
+ {
+ ret = TRUE ;
+ result = TRUE;
+ sNumRenders++;
+ }
+ gGL.flush();
+ LLVertexBuffer::unbind();
+ dynamicTexture->setBoundTarget(nullptr);
+ dynamicTexture->postRender(result);
+ }
+ }
+ }
+
+ if (use_fbo)
+ {
+ gPipeline.mBake.flush();
+ }
gGL.flush();
- return ret;
+ return ret;
}
//-----------------------------------------------------------------------------
@@ -245,15 +245,15 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::destroyGL()
{
- for( S32 order = 0; order < ORDER_COUNT; order++ )
- {
- for (instance_list_t::iterator iter = LLViewerDynamicTexture::sInstances[order].begin();
- iter != LLViewerDynamicTexture::sInstances[order].end(); ++iter)
- {
- LLViewerDynamicTexture *dynamicTexture = *iter;
- dynamicTexture->destroyGLTexture() ;
- }
- }
+ for( S32 order = 0; order < ORDER_COUNT; order++ )
+ {
+ for (instance_list_t::iterator iter = LLViewerDynamicTexture::sInstances[order].begin();
+ iter != LLViewerDynamicTexture::sInstances[order].end(); ++iter)
+ {
+ LLViewerDynamicTexture *dynamicTexture = *iter;
+ dynamicTexture->destroyGLTexture() ;
+ }
+ }
}
//-----------------------------------------------------------------------------
@@ -262,18 +262,18 @@ void LLViewerDynamicTexture::destroyGL()
//-----------------------------------------------------------------------------
void LLViewerDynamicTexture::restoreGL()
{
- if (gGLManager.mIsDisabled)
- {
- return ;
- }
-
- for( S32 order = 0; order < ORDER_COUNT; order++ )
- {
- for (instance_list_t::iterator iter = LLViewerDynamicTexture::sInstances[order].begin();
- iter != LLViewerDynamicTexture::sInstances[order].end(); ++iter)
- {
- LLViewerDynamicTexture *dynamicTexture = *iter;
- dynamicTexture->restoreGLTexture() ;
- }
- }
+ if (gGLManager.mIsDisabled)
+ {
+ return ;
+ }
+
+ for( S32 order = 0; order < ORDER_COUNT; order++ )
+ {
+ for (instance_list_t::iterator iter = LLViewerDynamicTexture::sInstances[order].begin();
+ iter != LLViewerDynamicTexture::sInstances[order].end(); ++iter)
+ {
+ LLViewerDynamicTexture *dynamicTexture = *iter;
+ dynamicTexture->restoreGLTexture() ;
+ }
+ }
}