Raise resolution of local baked texture preview from 512 to 2048

master
Rye Cogtail 2024-09-13 16:26:23 -04:00
parent 2f38f0685c
commit 85a7020e49
6 changed files with 72 additions and 45 deletions

View File

@ -28,8 +28,8 @@
#include "llavatarappearancedefines.h"
#include "indra_constants.h"
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 1024;
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 1024;
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH = 2048;
const S32 LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT = 2048;
using namespace LLAvatarAppearanceDefines;

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<?xml version="1.0" encoding="us-ascii" standalone="yes"?>
<linden_avatar
version="2.0" wearable_definition_version="22">
<!-- The wearable_definition_version is checked during asset upload. -->
@ -8923,8 +8923,8 @@
<!-- =========================================================== -->
<layer_set
body_region="hair"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer
name="base"
@ -9013,8 +9013,8 @@
<layer_set
body_region="head"
width="512"
height="512">
width="2048"
height="2048">
<layer
name="head bump base"
fixed_color = "128,128,128,255"
@ -10149,8 +10149,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="upper_body"
width="512"
height="512">
width="2048"
height="2048">
<layer
name="base_upperbody bump"
render_pass="bump"
@ -11458,8 +11458,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="lower_body"
width="512"
height="512">
width="2048"
height="2048">
<layer
name="lower body bump base"
fixed_color = "128,128,128,255"
@ -12448,8 +12448,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="eyes"
width="128"
height="128">
width="512"
height="512">
<layer
name="whites">
<texture
@ -12535,8 +12535,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="skirt"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer
name="skirt_fabric"
@ -12774,8 +12774,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="leftarm"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer
name="base"
@ -12850,8 +12850,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="leftleg"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer
name="base"
@ -12925,8 +12925,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="aux1"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer
@ -13002,8 +13002,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="aux2"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer
@ -13079,8 +13079,8 @@ render_pass="bump">
<!-- =========================================================== -->
<layer_set
body_region="aux3"
width="512"
height="512"
width="2048"
height="2048"
clear_alpha="false">
<layer

View File

@ -191,44 +191,42 @@ bool LLViewerDynamicTexture::updateAllInstances()
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;
}
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() >= LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH);
llassert(bake_target.getHeight() >= 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)
auto update_func = [&](LLViewerDynamicTexture* dynamicTexture, LLRenderTarget& renderTarget, S32 width, S32 height)
{
LLViewerDynamicTexture *dynamicTexture = *iter;
if (dynamicTexture->needsRender())
{
llassert(dynamicTexture->getFullWidth() <= S32(LLPipeline::MAX_BAKE_WIDTH));
llassert(dynamicTexture->getFullHeight() <= S32(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;
if (dynamicTexture->render())
{
ret = true ;
ret = true;
result = true;
sNumRenders++;
}
@ -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();

View File

@ -193,7 +193,7 @@ LLGLTFPreviewTexture::LLGLTFPreviewTexture(LLPointer<LLFetchedGLTFMaterial> mate
// static
LLPointer<LLGLTFPreviewTexture> LLGLTFPreviewTexture::create(LLPointer<LLFetchedGLTFMaterial> material)
{
return new LLGLTFPreviewTexture(material, LLPipeline::MAX_BAKE_WIDTH);
return new LLGLTFPreviewTexture(material, LLPipeline::MAX_PREVIEW_WIDTH);
}
bool LLGLTFPreviewTexture::needsRender()

View File

@ -219,7 +219,7 @@ S32 LLPipeline::RenderHeroProbeUpdateRate;
S32 LLPipeline::RenderHeroProbeConservativeUpdateMultiplier;
LLTrace::EventStatHandle<S64> LLPipeline::sStatBatchSize("renderbatchsize");
const U32 LLPipeline::MAX_BAKE_WIDTH = 512;
const U32 LLPipeline::MAX_PREVIEW_WIDTH = 512;
const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;
const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f;
@ -878,6 +878,8 @@ bool LLPipeline::allocateScreenBufferInternal(U32 resX, U32 resY)
// used to scale down textures
// See LLViwerTextureList::updateImagesCreateTextures and LLImageGL::scaleDown
mDownResMap.allocate(4, 4, GL_RGBA);
mBakeMap.allocate(LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH, LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT, GL_RGBA);
}
//HACK make screenbuffer allocations start failing after 30 seconds
if (gSavedSettings.getBOOL("SimulateFBOFailure"))
@ -1138,6 +1140,8 @@ void LLPipeline::releaseGLBuffers()
mDownResMap.release();
mBakeMap.release();
for (U32 i = 0; i < 3; i++)
{
mGlow[i].release();

View File

@ -737,6 +737,9 @@ public:
// downres scratch space for GPU downscaling of textures
LLRenderTarget mDownResMap;
// 2k bom scratch target
LLRenderTarget mBakeMap;
LLCullResult mSky;
LLCullResult mReflectedObjects;
LLCullResult mRefractedObjects;
@ -776,7 +779,7 @@ public:
//water distortion texture (refraction)
LLRenderTarget mWaterDis;
static const U32 MAX_BAKE_WIDTH;
static const U32 MAX_PREVIEW_WIDTH;
//texture for making the glow
LLRenderTarget mGlow[3];