diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index 1dee2fcb1..e2c032e20 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -433,6 +433,7 @@ void ShadowRenderer::renderShadowMap(video::ITexture *target, material.MaterialType = depth_shader_trans; } else { material.MaterialType = depth_shader; + material.BlendOperation = video::EBO_MIN; } m_driver->setTransform(video::ETS_WORLD, @@ -459,8 +460,10 @@ void ShadowRenderer::renderShadowObjects( u32 n_node_materials = shadow_node.node->getMaterialCount(); std::vector BufferMaterialList; std::vector> BufferMaterialCullingList; + std::vector BufferBlendOperationList; BufferMaterialList.reserve(n_node_materials); BufferMaterialCullingList.reserve(n_node_materials); + BufferBlendOperationList.reserve(n_node_materials); // backup materialtype for each material // (aka shader) @@ -475,6 +478,8 @@ void ShadowRenderer::renderShadowObjects( (bool)current_mat.BackfaceCulling, (bool)current_mat.FrontfaceCulling); current_mat.BackfaceCulling = true; current_mat.FrontfaceCulling = false; + + BufferBlendOperationList.push_back(current_mat.BlendOperation); } m_driver->setTransform(video::ETS_WORLD, @@ -490,6 +495,8 @@ void ShadowRenderer::renderShadowObjects( current_mat.BackfaceCulling = BufferMaterialCullingList[m].first; current_mat.FrontfaceCulling = BufferMaterialCullingList[m].second; + + current_mat.BlendOperation = BufferBlendOperationList[m]; } } // end for caster shadow nodes