diff options
| author | Dave Parks <davep@lindenlab.com> | 2022-09-14 16:24:20 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2022-09-14 16:24:20 -0500 | 
| commit | 2ce39f3ad98fe855fb126dc29c82145751434421 (patch) | |
| tree | b6cb724e100c20b94ea03f624b6fb8d30c54a288 | |
| parent | 47e039ce1fb30f0e44cd6a79c0655b94794bc577 (diff) | |
SL-17701 Fix for shadow passes not respecting double sided and alpha parameters for PBR materials.
| -rw-r--r-- | indra/newview/lldrawpool.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 19 | 
3 files changed, 19 insertions, 10 deletions
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 1e548141c8..7c4c2e4b7e 100644 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -577,6 +577,8 @@ void LLRenderPass::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL ba          params.mGroup->rebuildMesh();      } +    LLGLDisable cull(params.mGLTFMaterial && params.mGLTFMaterial->mDoubleSided ? GL_CULL_FACE : 0); +      LLGLEnableFunc stencil_test(GL_STENCIL_TEST, params.mSelected, &LLGLCommonFunc::selected_stencil_test);      params.mVertexBuffer->setBufferFast(mask); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index b2365653ba..a02c18d99f 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -5539,6 +5539,14 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,              draw_info->mNormalMap = vobj->getGLTFNormalMap(te);              draw_info->mSpecularMap = vobj->getGLTFMetallicRoughnessMap(te);              draw_info->mEmissiveMap = vobj->getGLTFEmissiveMap(te); +            if (draw_info->mGLTFMaterial->mAlphaMode == LLGLTFMaterial::ALPHA_MODE_MASK) +            { +                draw_info->mAlphaMaskCutoff = gltf_mat->mAlphaCutoff * gltf_mat->mAlbedoColor.mV[3]; +            } +            else +            { +                draw_info->mAlphaMaskCutoff = 1.f; +            }          }          else if (mat)  		{ diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 160a1680c1..858cc90d04 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -9753,9 +9753,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera          LLRenderPass::PASS_NORMMAP,          LLRenderPass::PASS_NORMMAP_EMISSIVE,          LLRenderPass::PASS_NORMSPEC, -        LLRenderPass::PASS_NORMSPEC_EMISSIVE, -        LLRenderPass::PASS_PBR_OPAQUE, // NOTE: Assumes PASS_PBR_OPAQUE_RIGGED is consecutive -        //LLRenderPass::PASS_PBR_OPAQUE_RIGGED, +        LLRenderPass::PASS_NORMSPEC_EMISSIVE      };      LLGLEnable cull(GL_CULL_FACE); @@ -9839,7 +9837,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera      if (use_shader)      { -        LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow geom"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_GEOM); +        LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow geom");          gDeferredShadowProgram.unbind();          renderGeomShadow(shadow_cam); @@ -9848,13 +9846,13 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera      }      else      { -        LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow geom"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_GEOM); +        LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow geom");          renderGeomShadow(shadow_cam);      }      { -        LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_ALPHA); +        LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha");          LL_PROFILE_GPU_ZONE("shadow alpha");          for (int i = 0; i < 2; ++i)          { @@ -9870,19 +9868,19 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera                  LLVertexBuffer::MAP_TEXTURE_INDEX;              { -                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha masked"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_ALPHA_MASKED); +                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha masked");                  renderMaskedObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE, rigged);              }              { -                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha blend"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_ALPHA_BLEND); +                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha blend");                  LLGLSLShader::sCurBoundShaderPtr->setMinimumAlpha(0.598f);                  renderAlphaObjects(mask, TRUE, TRUE, rigged);              }              { -                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow fullbright alpha masked"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_FULLBRIGHT_ALPHA_MASKED); +                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow fullbright alpha masked");                  gDeferredShadowFullbrightAlphaMaskProgram.bind(rigged);                  LLGLSLShader::sCurBoundShaderPtr->uniform1f(LLShaderMgr::DEFERRED_SHADOW_TARGET_WIDTH, (float)target_width);                  LLGLSLShader::sCurBoundShaderPtr->uniform1i(LLShaderMgr::SUN_UP_FACTOR, environment.getIsSunUp() ? 1 : 0); @@ -9891,7 +9889,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera              { -                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha grass"); //LL_RECORD_BLOCK_TIME(FTM_SHADOW_ALPHA_GRASS); +                LL_PROFILE_ZONE_NAMED_CATEGORY_PIPELINE("shadow alpha grass");                  gDeferredTreeShadowProgram.bind(rigged);                  if (i == 0)                  { @@ -9904,6 +9902,7 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera                  renderMaskedObjects(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, no_idx_mask, true, false, rigged);                  renderMaskedObjects(LLRenderPass::PASS_SPECMAP_MASK, no_idx_mask, true, false, rigged);                  renderMaskedObjects(LLRenderPass::PASS_NORMMAP_MASK, no_idx_mask, true, false, rigged); +                renderMaskedObjects(LLRenderPass::PASS_PBR_OPAQUE, no_idx_mask, true, false, rigged);              }          }      }  | 
