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.cpp86
1 files changed, 53 insertions, 33 deletions
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
index f1145948a7..33325e352f 100644
--- a/indra/newview/lldynamictexture.cpp
+++ b/indra/newview/lldynamictexture.cpp
@@ -50,8 +50,8 @@ S32 LLViewerDynamicTexture::sNumRenders = 0;
//-----------------------------------------------------------------------------
// LLViewerDynamicTexture()
//-----------------------------------------------------------------------------
-LLViewerDynamicTexture::LLViewerDynamicTexture(S32 width, S32 height, S32 components, EOrder order, BOOL clamp) :
- LLViewerTexture(width, height, components, FALSE),
+LLViewerDynamicTexture::LLViewerDynamicTexture(S32 width, S32 height, S32 components, EOrder order, bool clamp) :
+ LLViewerTexture(width, height, components, false),
mClamp(clamp)
{
llassert((1 <= components) && (components <= 4));
@@ -85,10 +85,10 @@ S8 LLViewerDynamicTexture::getType() const
void LLViewerDynamicTexture::generateGLTexture()
{
LLViewerTexture::generateGLTexture() ;
- generateGLTexture(-1, 0, 0, FALSE);
+ generateGLTexture(-1, 0, 0, false);
}
-void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format, BOOL swap_bytes)
+void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum primary_format, LLGLenum type_format, bool swap_bytes)
{
if (mComponents < 1 || mComponents > 4)
{
@@ -100,7 +100,7 @@ void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum
{
setExplicitFormat(internal_format, primary_format, type_format, swap_bytes);
}
- createGLTexture(0, raw_image, 0, TRUE, LLGLTexture::DYNAMIC_TEX);
+ createGLTexture(0, raw_image, 0, true, LLGLTexture::DYNAMIC_TEX);
setAddressMode((mClamp) ? LLTexUnit::TAM_CLAMP : LLTexUnit::TAM_WRAP);
mGLTexturep->setGLTextureCreated(false);
}
@@ -108,15 +108,15 @@ void LLViewerDynamicTexture::generateGLTexture(LLGLint internal_format, LLGLenum
//-----------------------------------------------------------------------------
// render()
//-----------------------------------------------------------------------------
-BOOL LLViewerDynamicTexture::render()
+bool LLViewerDynamicTexture::render()
{
- return FALSE;
+ return false;
}
//-----------------------------------------------------------------------------
// preRender()
//-----------------------------------------------------------------------------
-void LLViewerDynamicTexture::preRender(BOOL clear_depth)
+void LLViewerDynamicTexture::preRender(bool clear_depth)
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
@@ -142,7 +142,7 @@ void LLViewerDynamicTexture::preRender(BOOL clear_depth)
//-----------------------------------------------------------------------------
// postRender()
//-----------------------------------------------------------------------------
-void LLViewerDynamicTexture::postRender(BOOL success)
+void LLViewerDynamicTexture::postRender(bool success)
{
{
if (success)
@@ -181,55 +181,53 @@ void LLViewerDynamicTexture::postRender(BOOL success)
// updateDynamicTextures()
// Calls update on each dynamic texture. Calls each group in order: "first," then "middle," then "last."
//-----------------------------------------------------------------------------
-BOOL LLViewerDynamicTexture::updateAllInstances()
+bool LLViewerDynamicTexture::updateAllInstances()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
sNumRenders = 0;
if (gGLManager.mIsDisabled)
{
- return TRUE;
+ return true;
}
- LLRenderTarget& bake_target = gPipeline.mAuxillaryRT.deferredScreen;
-
- if (!bake_target.isComplete())
+ LLRenderTarget& preview_target = gPipeline.mAuxillaryRT.deferredScreen;
+ LLRenderTarget& bake_target = gPipeline.mBakeMap;
+ if (!preview_target.isComplete() || !bake_target.isComplete())
{
llassert(false);
- return FALSE;
+ return false;
}
- llassert(bake_target.getWidth() >= LLPipeline::MAX_BAKE_WIDTH);
- llassert(bake_target.getHeight() >= LLPipeline::MAX_BAKE_WIDTH);
+ llassert(preview_target.getWidth() >= LLPipeline::MAX_PREVIEW_WIDTH);
+ llassert(preview_target.getHeight() >= LLPipeline::MAX_PREVIEW_WIDTH);
+ llassert(bake_target.getWidth() >= (U32) LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH);
+ llassert(bake_target.getHeight() >= (U32) LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT);
- bake_target.bindTarget();
- bake_target.clear();
+ preview_target.bindTarget();
+ preview_target.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)
+ bool result = false;
+ bool ret = false ;
+ auto update_func = [&](LLViewerDynamicTexture* dynamicTexture, LLRenderTarget& renderTarget, S32 width, S32 height)
{
- LLViewerDynamicTexture *dynamicTexture = *iter;
if (dynamicTexture->needsRender())
{
- llassert(dynamicTexture->getFullWidth() <= LLPipeline::MAX_BAKE_WIDTH);
- llassert(dynamicTexture->getFullHeight() <= LLPipeline::MAX_BAKE_WIDTH);
+ llassert(dynamicTexture->getFullWidth() <= width);
+ llassert(dynamicTexture->getFullHeight() <= height);
glClear(GL_DEPTH_BUFFER_BIT);
- gGL.color4f(1,1,1,1);
- dynamicTexture->setBoundTarget(&bake_target);
+ gGL.color4f(1.f, 1.f, 1.f, 1.f);
+ dynamicTexture->setBoundTarget(&renderTarget);
dynamicTexture->preRender(); // Must be called outside of startRender()
- result = FALSE;
+ result = false;
if (dynamicTexture->render())
{
- ret = TRUE ;
- result = TRUE;
+ ret = true;
+ result = true;
sNumRenders++;
}
gGL.flush();
@@ -237,9 +235,31 @@ BOOL LLViewerDynamicTexture::updateAllInstances()
dynamicTexture->setBoundTarget(nullptr);
dynamicTexture->postRender(result);
}
+ };
+
+ // ORDER_FIRST is unused, ORDER_MIDDLE is various ui preview
+ for(S32 order = 0; order < ORDER_LAST; ++order)
+ {
+ for (LLViewerDynamicTexture* dynamicTexture : LLViewerDynamicTexture::sInstances[order])
+ {
+ update_func(dynamicTexture, preview_target, LLPipeline::MAX_PREVIEW_WIDTH, LLPipeline::MAX_PREVIEW_WIDTH);
}
}
+ preview_target.flush();
+
+ // ORDER_LAST is baked skin preview, ORDER_RESET resets appearance parameters and does not render.
+ bake_target.bindTarget();
+ bake_target.clear();
+ result = false;
+ ret = false;
+ for (S32 order = ORDER_LAST; order < ORDER_COUNT; ++order)
+ {
+ for (LLViewerDynamicTexture* dynamicTexture : LLViewerDynamicTexture::sInstances[order])
+ {
+ update_func(dynamicTexture, bake_target, LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH, LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT);
+ }
+ }
bake_target.flush();
gGL.flush();