NORSPEC-63 Fix for faces with materials not casting shadows.
parent
001ed7626b
commit
8f07110103
|
|
@ -5468,7 +5468,7 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )
|
|||
}
|
||||
else
|
||||
{
|
||||
mAlphaPool = new_poolp;
|
||||
mAlphaPool = (LLDrawPoolAlpha*) new_poolp;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -6976,6 +6976,17 @@ void LLPipeline::renderObjects(U32 type, U32 mask, BOOL texture, BOOL batch_text
|
|||
gGLLastMatrix = NULL;
|
||||
}
|
||||
|
||||
void LLPipeline::renderMaskedObjects(U32 type, U32 mask, BOOL texture, BOOL batch_texture)
|
||||
{
|
||||
assertInitialized();
|
||||
gGL.loadMatrix(gGLModelView);
|
||||
gGLLastMatrix = NULL;
|
||||
mAlphaPool->pushMaskBatches(type, mask, texture, batch_texture);
|
||||
gGL.loadMatrix(gGLModelView);
|
||||
gGLLastMatrix = NULL;
|
||||
}
|
||||
|
||||
|
||||
void apply_cube_face_rotation(U32 face)
|
||||
{
|
||||
switch (face)
|
||||
|
|
@ -8984,7 +8995,15 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
|
|||
LLRenderPass::PASS_FULLBRIGHT,
|
||||
LLRenderPass::PASS_SHINY,
|
||||
LLRenderPass::PASS_BUMP,
|
||||
LLRenderPass::PASS_FULLBRIGHT_SHINY
|
||||
LLRenderPass::PASS_FULLBRIGHT_SHINY ,
|
||||
LLRenderPass::PASS_MATERIAL,
|
||||
LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE,
|
||||
LLRenderPass::PASS_SPECMAP,
|
||||
LLRenderPass::PASS_SPECMAP_EMISSIVE,
|
||||
LLRenderPass::PASS_NORMMAP,
|
||||
LLRenderPass::PASS_NORMMAP_EMISSIVE,
|
||||
LLRenderPass::PASS_NORMSPEC,
|
||||
LLRenderPass::PASS_NORMSPEC_EMISSIVE,
|
||||
};
|
||||
|
||||
LLGLEnable cull(GL_CULL_FACE);
|
||||
|
|
@ -9055,7 +9074,6 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
|
|||
{
|
||||
LLFastTimer ftm(FTM_SHADOW_ALPHA);
|
||||
gDeferredShadowAlphaMaskProgram.bind();
|
||||
gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);
|
||||
gDeferredShadowAlphaMaskProgram.uniform1f(LLShaderMgr::DEFERRED_SHADOW_TARGET_WIDTH, (float)target_width);
|
||||
|
||||
U32 mask = LLVertexBuffer::MAP_VERTEX |
|
||||
|
|
@ -9063,10 +9081,19 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
|
|||
LLVertexBuffer::MAP_COLOR |
|
||||
LLVertexBuffer::MAP_TEXTURE_INDEX;
|
||||
|
||||
renderObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE);
|
||||
renderObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE);
|
||||
renderMaskedObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE);
|
||||
renderMaskedObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE);
|
||||
gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);
|
||||
renderObjects(LLRenderPass::PASS_ALPHA, mask, TRUE, TRUE);
|
||||
|
||||
mask = mask & ~LLVertexBuffer::MAP_TEXTURE_INDEX;
|
||||
|
||||
gDeferredTreeShadowProgram.bind();
|
||||
renderMaskedObjects(LLRenderPass::PASS_NORMSPEC_MASK, mask);
|
||||
renderMaskedObjects(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, mask);
|
||||
renderMaskedObjects(LLRenderPass::PASS_SPECMAP_MASK, mask);
|
||||
renderMaskedObjects(LLRenderPass::PASS_NORMMAP_MASK, mask);
|
||||
|
||||
gDeferredTreeShadowProgram.setMinimumAlpha(0.598f);
|
||||
renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE);
|
||||
}
|
||||
|
|
@ -9400,6 +9427,22 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
|
|||
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
|
||||
LLPipeline::RENDER_TYPE_PASS_SHINY,
|
||||
LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
|
||||
LLPipeline::RENDER_TYPE_PASS_MATERIAL,
|
||||
LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA,
|
||||
LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA_MASK,
|
||||
LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA_EMISSIVE,
|
||||
LLPipeline::RENDER_TYPE_PASS_SPECMAP,
|
||||
LLPipeline::RENDER_TYPE_PASS_SPECMAP_BLEND,
|
||||
LLPipeline::RENDER_TYPE_PASS_SPECMAP_MASK,
|
||||
LLPipeline::RENDER_TYPE_PASS_SPECMAP_EMISSIVE,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMMAP,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMMAP_BLEND,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMMAP_MASK,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMMAP_EMISSIVE,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMSPEC,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMSPEC_BLEND,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMSPEC_MASK,
|
||||
LLPipeline::RENDER_TYPE_PASS_NORMSPEC_EMISSIVE,
|
||||
END_RENDER_TYPES);
|
||||
|
||||
gGL.setColorMask(false, false);
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ class LLCullResult;
|
|||
class LLVOAvatar;
|
||||
class LLGLSLShader;
|
||||
class LLCurlRequest;
|
||||
class LLDrawPoolAlpha;
|
||||
|
||||
class LLMeshResponder;
|
||||
|
||||
|
|
@ -257,6 +258,8 @@ public:
|
|||
void forAllVisibleDrawables(void (*func)(LLDrawable*));
|
||||
|
||||
void renderObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE);
|
||||
void renderMaskedObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE);
|
||||
|
||||
void renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture);
|
||||
|
||||
void grabReferences(LLCullResult& result);
|
||||
|
|
@ -437,11 +440,26 @@ public:
|
|||
RENDER_TYPE_PASS_SHINY = LLRenderPass::PASS_SHINY,
|
||||
RENDER_TYPE_PASS_BUMP = LLRenderPass::PASS_BUMP,
|
||||
RENDER_TYPE_PASS_POST_BUMP = LLRenderPass::PASS_POST_BUMP,
|
||||
RENDER_TYPE_PASS_MATERIAL = LLRenderPass::PASS_MATERIAL,
|
||||
RENDER_TYPE_PASS_GLOW = LLRenderPass::PASS_GLOW,
|
||||
RENDER_TYPE_PASS_ALPHA = LLRenderPass::PASS_ALPHA,
|
||||
RENDER_TYPE_PASS_ALPHA_MASK = LLRenderPass::PASS_ALPHA_MASK,
|
||||
RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK = LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK,
|
||||
RENDER_TYPE_PASS_MATERIAL = LLRenderPass::PASS_MATERIAL,
|
||||
RENDER_TYPE_PASS_MATERIAL_ALPHA = LLRenderPass::PASS_MATERIAL_ALPHA,
|
||||
RENDER_TYPE_PASS_MATERIAL_ALPHA_MASK = LLRenderPass::PASS_MATERIAL_ALPHA_MASK,
|
||||
RENDER_TYPE_PASS_MATERIAL_ALPHA_EMISSIVE= LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE,
|
||||
RENDER_TYPE_PASS_SPECMAP = LLRenderPass::PASS_SPECMAP,
|
||||
RENDER_TYPE_PASS_SPECMAP_BLEND = LLRenderPass::PASS_SPECMAP_BLEND,
|
||||
RENDER_TYPE_PASS_SPECMAP_MASK = LLRenderPass::PASS_SPECMAP_MASK,
|
||||
RENDER_TYPE_PASS_SPECMAP_EMISSIVE = LLRenderPass::PASS_SPECMAP_EMISSIVE,
|
||||
RENDER_TYPE_PASS_NORMMAP = LLRenderPass::PASS_NORMMAP,
|
||||
RENDER_TYPE_PASS_NORMMAP_BLEND = LLRenderPass::PASS_NORMMAP_BLEND,
|
||||
RENDER_TYPE_PASS_NORMMAP_MASK = LLRenderPass::PASS_NORMMAP_MASK,
|
||||
RENDER_TYPE_PASS_NORMMAP_EMISSIVE = LLRenderPass::PASS_NORMMAP_EMISSIVE,
|
||||
RENDER_TYPE_PASS_NORMSPEC = LLRenderPass::PASS_NORMSPEC,
|
||||
RENDER_TYPE_PASS_NORMSPEC_BLEND = LLRenderPass::PASS_NORMSPEC_BLEND,
|
||||
RENDER_TYPE_PASS_NORMSPEC_MASK = LLRenderPass::PASS_NORMSPEC_MASK,
|
||||
RENDER_TYPE_PASS_NORMSPEC_EMISSIVE = LLRenderPass::PASS_NORMSPEC_EMISSIVE,
|
||||
// Following are object types (only used in drawable mRenderType)
|
||||
RENDER_TYPE_HUD = LLRenderPass::NUM_RENDER_TYPES,
|
||||
RENDER_TYPE_VOLUME,
|
||||
|
|
@ -768,7 +786,7 @@ protected:
|
|||
// For quick-lookups into mPools (mapped by texture pointer)
|
||||
std::map<uintptr_t, LLDrawPool*> mTerrainPools;
|
||||
std::map<uintptr_t, LLDrawPool*> mTreePools;
|
||||
LLDrawPool* mAlphaPool;
|
||||
LLDrawPoolAlpha* mAlphaPool;
|
||||
LLDrawPool* mSkyPool;
|
||||
LLDrawPool* mTerrainPool;
|
||||
LLDrawPool* mWaterPool;
|
||||
|
|
|
|||
Loading…
Reference in New Issue