mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-23 13:19:19 +02:00
fix light direction for shadow map; inhibit shadow map rendering if no shadow casting light is present
This commit is contained in:
@@ -420,17 +420,21 @@ bool NvRenderer::Render() {
|
||||
{ // Shadow render pass
|
||||
Timer::subsystem.gfx_shadows.start();
|
||||
command_list->beginMarker("Shadow render");
|
||||
|
||||
glm::vec3 light_color, light_direction;
|
||||
m_sky->CalcLighting(light_direction, light_color);
|
||||
m_shadow_map->CalcCascades(
|
||||
glm::perspectiveFovRH_ZO(fov,
|
||||
static_cast<double>(Global.window_size.x),
|
||||
static_cast<double>(Global.window_size.y),
|
||||
.1, pass.m_draw_range),
|
||||
transform, Global.DayLight.direction);
|
||||
transform, -light_direction);
|
||||
m_shadow_map->UpdateConstants(command_list);
|
||||
m_gbuffer_shadow->Clear(command_list);
|
||||
|
||||
for (int cascade = 0; cascade < m_shadow_map->m_cascade_matrices.size();
|
||||
++cascade) {
|
||||
if (dot(light_color, light_color) > 0.) {
|
||||
for (int cascade = 0;
|
||||
cascade < m_shadow_map->m_cascade_matrices.size(); ++cascade) {
|
||||
RenderPass pass{};
|
||||
|
||||
pass.m_draw_shapes =
|
||||
@@ -453,10 +457,12 @@ bool NvRenderer::Render() {
|
||||
|
||||
pass.m_origin = Global.pCamera.Pos;
|
||||
pass.m_transform = glm::dmat3{1.};
|
||||
// pass.m_camera.position() = simulation::Train->Dynamic()->vPosition;
|
||||
// pass.m_camera.position() =
|
||||
// simulation::Train->Dynamic()->vPosition;
|
||||
pass.m_draw_range = 150.;
|
||||
pass.m_type = RenderPassType::ShadowMap;
|
||||
pass.m_framebuffer = m_gbuffer_shadow->m_slice_framebuffers[cascade];
|
||||
pass.m_framebuffer =
|
||||
m_gbuffer_shadow->m_slice_framebuffers[cascade];
|
||||
pass.m_command_list_draw = command_list;
|
||||
pass.m_command_list_preparation = command_list;
|
||||
pass.m_frustum_tester = &frustum_tester;
|
||||
@@ -479,6 +485,7 @@ bool NvRenderer::Render() {
|
||||
RenderTracks(pass);
|
||||
RenderAnimateds(pass);
|
||||
}
|
||||
}
|
||||
|
||||
Timer::subsystem.gfx_shadows.stop();
|
||||
command_list->endMarker();
|
||||
|
||||
Reference in New Issue
Block a user