diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index e055cade..1bbd73f1 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -4015,42 +4015,15 @@ void CEngine::RenderShadowMap() // If no shadow map texture exists, create it if (m_shadowMap.id == 0) { - FramebufferParams params; - params.width = m_offscreenShadowRenderingResolution; - params.height = m_offscreenShadowRenderingResolution; - params.depth = 32; - params.colorAttachment = FramebufferParams::AttachmentType::None; - params.depthAttachment = FramebufferParams::AttachmentType::Texture; + m_shadowMap = m_device->CreateDepthTexture( + m_offscreenShadowRenderingResolution, + m_offscreenShadowRenderingResolution, + 32); - CFramebuffer* framebuffer = m_device->CreateFramebuffer("shadow", params); - if (framebuffer == nullptr) - { - GetLogger()->Error("Could not create shadow mapping framebuffer, disabling dynamic shadows\n"); - m_shadowMapping = false; - m_offscreenShadowRendering = false; - m_qualityShadows = false; - CProfiler::StopPerformanceCounter(PCNT_RENDER_SHADOW_MAP); - return; - } - - m_shadowMap.id = framebuffer->GetDepthTexture(); - m_shadowMap.size = { params.width, params.height }; - - GetLogger()->Info("Created shadow map texture: %dx%d, depth %d\n", params.width, params.height, params.depth); + GetLogger()->Info("Created shadow map texture: %dx%d, depth %d\n", + m_shadowMap.size.x, m_shadowMap.size.y, 32); } - // change state to rendering shadow maps - m_device->SetColorMask(false, false, false, false); - m_device->SetRenderState(RENDER_STATE_DEPTH_TEST, true); - m_device->SetRenderState(RENDER_STATE_DEPTH_WRITE, true); - m_device->SetRenderState(RENDER_STATE_BLENDING, false); - m_device->SetRenderState(RENDER_STATE_LIGHTING, false); - m_device->SetRenderState(RENDER_STATE_FOG, false); - m_device->SetRenderState(RENDER_STATE_CULLING, false); - m_device->SetRenderState(RENDER_STATE_ALPHA_TEST, true); - m_device->SetAlphaTestFunc(COMP_FUNC_GREATER, 0.5f); - m_device->SetViewport(0, 0, m_shadowMap.size.x, m_shadowMap.size.y); - auto renderer = m_device->GetShadowRenderer(); renderer->Begin(); renderer->SetShadowMap(m_shadowMap); @@ -4172,9 +4145,6 @@ void CEngine::RenderShadowMap() m_device->SetRenderState(RENDER_STATE_CULLING, false); m_device->SetCullMode(CULL_CW); - m_device->GetFramebuffer("default")->Bind(); - //m_device->GetFramebuffer("shadow")->Unbind(); - // restore default state m_device->SetViewport(0, 0, m_size.x, m_size.y); diff --git a/src/graphics/opengl/gl33renderers.cpp b/src/graphics/opengl/gl33renderers.cpp index e6899458..429130ba 100644 --- a/src/graphics/opengl/gl33renderers.cpp +++ b/src/graphics/opengl/gl33renderers.cpp @@ -550,6 +550,13 @@ void CGL33ShadowRenderer::Begin() glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(2.0f, 8.0f); + + glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + glEnable(GL_DEPTH_TEST); + glDepthMask(GL_TRUE); + + glDisable(GL_BLEND); + glDisable(GL_CULL_FACE); } void CGL33ShadowRenderer::End() @@ -560,6 +567,8 @@ void CGL33ShadowRenderer::End() glDisable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(0.0f, 0.0f); + glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + m_device->Restore(); }