30
30
31
31
namespace gl_engine {
32
32
33
- ShadowMapping::ShadowMapping (
34
- ShaderRegistry* shader_registry, std::shared_ptr<UniformBuffer<uboShadowConfig>> shadow_config, std::shared_ptr<UniformBuffer<uboSharedConfig>> shared_config)
33
+ ShadowMapping::ShadowMapping (ShaderRegistry* shader_registry)
35
34
: m_shadow_program(std::make_shared<ShaderProgram>(" shadowmap.vert" , " shadowmap.frag" ))
36
- , m_shadow_config(shadow_config)
37
- , m_shared_config(shared_config)
38
35
{
39
36
shader_registry->add_shader (m_shadow_program);
40
37
m_f = QOpenGLContext::currentContext ()->extraFunctions ();
@@ -49,28 +46,32 @@ ShadowMapping::~ShadowMapping() {
49
46
50
47
}
51
48
52
- void ShadowMapping::draw (TileGeometry* tile_geometry, const nucleus::tile::IdSet& draw_tileset, const nucleus::camera::Definition& camera)
49
+ void ShadowMapping::draw (TileGeometry* tile_geometry,
50
+ const nucleus::tile::IdSet& draw_tileset,
51
+ const nucleus::camera::Definition& camera,
52
+ std::shared_ptr<UniformBuffer<uboShadowConfig>> shadow_config,
53
+ std::shared_ptr<UniformBuffer<uboSharedConfig>> shared_config)
53
54
{
54
55
55
56
// NOTE: ReverseZ is not necessary for ShadowMapping since a directional light is using an orthographic projection
56
57
// and therefore the distribution of depth is linear anyway.
57
58
58
59
float far_plane = 100000 ; // Similar to camera?
59
60
float near_plane = camera.near_plane (); // Similar to camera?
60
- m_shadow_config ->data .cascade_planes [0 ].x = near_plane;
61
- m_shadow_config ->data .cascade_planes [1 ].x = far_plane / 50 .0f ;
62
- m_shadow_config ->data .cascade_planes [2 ].x = far_plane / 25 .0f ;
63
- m_shadow_config ->data .cascade_planes [3 ].x = far_plane / 10 .0f ;
64
- m_shadow_config ->data .cascade_planes [4 ].x = far_plane;
65
- m_shadow_config ->data .shadowmap_size = glm::vec2 (SHADOWMAP_WIDTH, SHADOWMAP_HEIGHT);
66
-
67
- auto qlight_dir = m_shared_config ->data .m_sun_light_dir ;
61
+ shadow_config ->data .cascade_planes [0 ].x = near_plane;
62
+ shadow_config ->data .cascade_planes [1 ].x = far_plane / 50 .0f ;
63
+ shadow_config ->data .cascade_planes [2 ].x = far_plane / 25 .0f ;
64
+ shadow_config ->data .cascade_planes [3 ].x = far_plane / 10 .0f ;
65
+ shadow_config ->data .cascade_planes [4 ].x = far_plane;
66
+ shadow_config ->data .shadowmap_size = glm::vec2 (SHADOWMAP_WIDTH, SHADOWMAP_HEIGHT);
67
+
68
+ auto qlight_dir = shared_config ->data .m_sun_light_dir ;
68
69
auto light_dir = -glm::vec3 (qlight_dir.x (), qlight_dir.y (), qlight_dir.z ());
69
70
70
71
for (size_t i = 0 ; i < SHADOW_CASCADES; ++i)
71
- m_shadow_config ->data .light_space_view_proj_matrix [i] = getLightSpaceMatrix (m_shadow_config ->data .cascade_planes [i].x , m_shadow_config ->data .cascade_planes [i + 1 ].x , camera, light_dir);
72
+ shadow_config ->data .light_space_view_proj_matrix [i] = getLightSpaceMatrix (shadow_config ->data .cascade_planes [i].x , shadow_config ->data .cascade_planes [i + 1 ].x , camera, light_dir);
72
73
73
- m_shadow_config ->update_gpu_data ();
74
+ shadow_config ->update_gpu_data ();
74
75
75
76
m_f->glEnable (GL_DEPTH_TEST);
76
77
m_f->glDepthFunc (GL_LESS);
0 commit comments