diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2024-05-14 21:02:28 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2024-05-14 21:02:28 -0400 |
commit | 094dcc07f8c1d90ae723dbe60eddacb90a09eae8 (patch) | |
tree | e750942e5f22ed677b543bd49509c2a7cdc5ce56 /indra/newview/lldynamictexture.cpp | |
parent | d4043d3b011c32eb503c43c551872f9c24d7344f (diff) | |
parent | 38c2a5bde985a6a8a96d912d432f8bdf7e5b60be (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.cpp | 302 |
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() ; + } + } } |