From 621a342809bea5f08b37a369399c6757c0bce527 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Tue, 9 Apr 2019 14:18:42 -0400 Subject: [PATCH] What happens to a ShowParcelOwners deferred? Does it render like a ShowParcelOwners in the forward? Or fester like a bug when it's run? Does it get reported like rotten meat? Or forgot and coded over giving users a treat? Maybe it just sags like a heavy bird... Prepare to Implode! Thanks to Beware Hax for reporting this --- indra/newview/lldrawpoolterrain.cpp | 52 ++++++++++++++++++----------- indra/newview/lldrawpoolterrain.h | 4 +++ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp index c3fcc5461..b348bc6ae 100644 --- a/indra/newview/lldrawpoolterrain.cpp +++ b/indra/newview/lldrawpoolterrain.cpp @@ -220,26 +220,8 @@ void LLDrawPoolTerrain::render(S32 pass) } // Special-case for land ownership feedback - static const LLCachedControl show_parcel_owners("ShowParcelOwners",false); - if (show_parcel_owners) { - if (mVertexShaderLevel > 1) - { //use fullbright shader for highlighting - LLGLSLShader* old_shader = sShader; - sShader->unbind(); - sShader = &gHighlightProgram; - sShader->bind(); - gGL.diffuseColor4f(1,1,1,1); - LLGLEnable polyOffset; - gGL.setPolygonOffset(-1.0f, -1.0f); - renderOwnership(); - sShader = old_shader; - sShader->bind(); - } - else - { - renderOwnership(); - } + hilightParcelOwners(); } } @@ -267,7 +249,14 @@ void LLDrawPoolTerrain::renderDeferred(S32 pass) { return; } + renderFullShader(); + + // Special-case for land ownership feedback + { + hilightParcelOwners(); + } + } void LLDrawPoolTerrain::beginShadowPass(S32 pass) @@ -459,6 +448,29 @@ void LLDrawPoolTerrain::renderFullShader() gGL.matrixMode(LLRender::MM_MODELVIEW); } +void LLDrawPoolTerrain::hilightParcelOwners() +{ + static const LLCachedControl show_parcel_owners("ShowParcelOwners",false); + if (!show_parcel_owners) return; + if (mVertexShaderLevel > 1) + { //use fullbright shader for highlighting + LLGLSLShader* old_shader = sShader; + sShader->unbind(); + sShader = &gHighlightProgram; + sShader->bind(); + gGL.diffuseColor4f(1,1,1,1); + LLGLEnable polyOffset; + gGL.setPolygonOffset(-1.0f, -1.0f); + renderOwnership(); + sShader = old_shader; + sShader->bind(); + } + else + { + renderOwnership(); + } +} + void LLDrawPoolTerrain::renderFull4TU() { // Hack! Get the region that this draw pool is rendering from! @@ -493,6 +505,7 @@ void LLDrawPoolTerrain::renderFull4TU() glEnable(GL_TEXTURE_GEN_T); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); + glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); @@ -601,7 +614,6 @@ void LLDrawPoolTerrain::renderFull4TU() gGL.matrixMode(LLRender::MM_TEXTURE); gGL.loadIdentity(); gGL.translatef(-1.f, 0.f, 0.f); - gGL.matrixMode(LLRender::MM_MODELVIEW); // Set alpha texture and do lighting modulation diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h index e87229c0f..08ab12276 100644 --- a/indra/newview/lldrawpoolterrain.h +++ b/indra/newview/lldrawpoolterrain.h @@ -80,6 +80,7 @@ public: static S32 sDetailMode; static F32 sDetailScale; // meters per texture + protected: void renderSimple(); void renderOwnership(); @@ -88,6 +89,9 @@ protected: void renderFull4TU(); void renderFullShader(); void drawLoop(); + +private: + void hilightParcelOwners(); }; #endif // LL_LLDRAWPOOLSIMPLE_H