From a2db442dea906f35456e5d68197b02a606308cdf Mon Sep 17 00:00:00 2001 From: Beq Date: Sat, 28 Dec 2024 18:16:40 +0000 Subject: [PATCH] Fix for preview targets not rendering correctly --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/lldynamictexture.cpp | 8 +++++--- indra/newview/pipeline.cpp | 7 ++++++- indra/newview/pipeline.h | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index d1496fd069..e883c77adc 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9767,7 +9767,7 @@ Change of this parameter will affect the layout of buttons in notification toast Type S32 Value - 1024 + 2048 PreviewAmbientColor diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index b2f0f29b97..3b8721c87c 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -190,8 +190,10 @@ bool LLViewerDynamicTexture::updateAllInstances() { return true; } - - LLRenderTarget& preview_target = gPipeline.mAuxillaryRT.deferredScreen; + // Add dedicated preview target + // LLRenderTarget& preview_target = gPipeline.mAuxillaryRT.deferredScreen; + LLRenderTarget& preview_target = gPipeline.mPreviewScreen; + // LLRenderTarget& bake_target = gPipeline.mBakeMap; if (!preview_target.isComplete() || !bake_target.isComplete()) { @@ -199,7 +201,7 @@ bool LLViewerDynamicTexture::updateAllInstances() return false; } llassert(preview_target.getWidth() >= LLPipeline::MAX_PREVIEW_WIDTH); - llassert(preview_target.getHeight() >= LLPipeline::MAX_PREVIEW_WIDTH); + llassert(preview_target.getHeight() >= LLPipeline::MAX_PREVIEW_HEIGHT); // make this consistent with other render targets llassert(bake_target.getWidth() >= (U32) LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH); llassert(bake_target.getHeight() >= (U32) LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 177715ec7e..d1c17604f1 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -235,7 +235,9 @@ S32 LLPipeline::RenderHeroProbeUpdateRate; S32 LLPipeline::RenderHeroProbeConservativeUpdateMultiplier; LLTrace::EventStatHandle LLPipeline::sStatBatchSize("renderbatchsize"); -const U32 LLPipeline::MAX_PREVIEW_WIDTH = 512; +// const U32 LLPipeline::MAX_PREVIEW_WIDTH = 512; +constexpr U32 LLPipeline::MAX_PREVIEW_WIDTH = 2048; +constexpr U32 LLPipeline::MAX_PREVIEW_HEIGHT = 2048; const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f; const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f; @@ -999,6 +1001,7 @@ bool LLPipeline::allocateScreenBufferInternal(U32 resX, U32 resY) // See LLViwerTextureList::updateImagesCreateTextures and LLImageGL::scaleDown mDownResMap.allocate(1024, 1024, GL_RGBA); + mPreviewScreen.allocate(MAX_PREVIEW_WIDTH, MAX_PREVIEW_HEIGHT, GL_RGBA); // create an independent preview screen target mBakeMap.allocate(LLAvatarAppearanceDefines::SCRATCH_TEX_WIDTH, LLAvatarAppearanceDefines::SCRATCH_TEX_HEIGHT, GL_RGBA); } //HACK make screenbuffer allocations start failing after 30 seconds @@ -1326,6 +1329,8 @@ void LLPipeline::releaseScreenBuffers() mHeroProbeRT.screen.release(); mHeroProbeRT.deferredScreen.release(); mHeroProbeRT.deferredLight.release(); + + mPreviewScreen.release(); // dedicated preview target } void LLPipeline::releaseSunShadowTarget(U32 index) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 40a6fcdc39..3b50453c40 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -717,6 +717,11 @@ public: // auxillary 512x512 render target pack // used by reflection probes and dynamic texture bakes RenderTargetPack mAuxillaryRT; + // Fix the build floater preview window + // dedicated 2048x2048 render target for preview + // used by preview window dynamic textures + LLRenderTarget mPreviewScreen; + // // Auxillary render target pack scaled to the hero probe's per-face size. RenderTargetPack mHeroProbeRT; @@ -793,6 +798,7 @@ public: LLRenderTarget mWaterDis; static const U32 MAX_PREVIEW_WIDTH; + static const U32 MAX_PREVIEW_HEIGHT; // dedicated render target for previews //texture for making the glow LLRenderTarget mGlow[3];