From abf788175c451046f82cc9aeaddc894c47863ffa Mon Sep 17 00:00:00 2001
From: Dave Parks <davep@lindenlab.com>
Date: Tue, 6 Sep 2022 15:07:22 -0500
Subject: [PATCH] SL-18096 WIP -- partial support for double sided rendering. 
 Shadow map and picking support TBD.

---
 indra/llcommon/llworkerthread.cpp                               | 1 +
 .../app_settings/shaders/class1/deferred/pbropaqueF.glsl        | 2 ++
 indra/newview/lldrawpoolpbropaque.cpp                           | 2 ++
 3 files changed, 5 insertions(+)

diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 02ce4823b83..bd2eb2089cc 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -97,6 +97,7 @@ S32 LLWorkerThread::update(F32 max_time_ms)
 		{
 			if (worker->getFlags(LLWorkerClass::WCF_WORK_FINISHED))
 			{
+                worker->setFlags(LLWorkerClass::WCF_DELETE_REQUESTED);
 				delete_list.push_back(worker);
 				mDeleteList.erase(curiter);
 			}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
index 7a13abc7e87..f5b56983059 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
@@ -153,6 +153,8 @@ void main()
     col.rgb = vary_position.xyz;
 #endif
 
+    tnorm *= gl_FrontFacing ? 1.0 : -1.0;
+
     // See: C++: addDeferredAttachments(), GLSL: softenLightF
     frag_data[0] = vec4(col, 0.0);                                                   // Diffuse
     frag_data[1] = vec4(emissive, vertex_color.a);                                   // PBR sRGB Emissive
diff --git a/indra/newview/lldrawpoolpbropaque.cpp b/indra/newview/lldrawpoolpbropaque.cpp
index 9fc3d51cad3..e1614904b40 100644
--- a/indra/newview/lldrawpoolpbropaque.cpp
+++ b/indra/newview/lldrawpoolpbropaque.cpp
@@ -146,6 +146,8 @@ void LLDrawPoolPBROpaque::renderDeferred(S32 pass)
             shader->uniform1f(LLShaderMgr::METALLIC_FACTOR, pparams->mGLTFMaterial->mMetallicFactor);
             shader->uniform3fv(LLShaderMgr::EMISSIVE_COLOR, 1, pparams->mGLTFMaterial->mEmissiveColor.mV);
 
+            LLGLDisable cull_face(mat->mDoubleSided ? GL_CULL_FACE : 0);
+
             if (rigged)
             {
                 if (pparams->mAvatar.notNull() && (lastAvatar != pparams->mAvatar || lastMeshId != pparams->mSkinInfo->mHash))
-- 
GitLab