diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-06-12 14:28:05 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-06-12 14:28:05 +0200 |
commit | e3b48d03689a07bc19805e4db748f18fc263392b (patch) | |
tree | fc087b021bb0f15b83b427ccf93c1b8633f05b7a | |
parent | 44d71d08912c0d633433ce2d9d2a368d0b01c590 (diff) |
wip
-rw-r--r-- | shaders/lightmap.cpp | 19 | ||||
-rw-r--r-- | shaders/shader.hpp | 2 |
2 files changed, 17 insertions, 4 deletions
diff --git a/shaders/lightmap.cpp b/shaders/lightmap.cpp index 60728999..56299fb3 100644 --- a/shaders/lightmap.cpp +++ b/shaders/lightmap.cpp @@ -30,8 +30,9 @@ constexpr auto buffer_size = 256uz; constexpr auto clip_start = Vector2{-1, -1}; constexpr auto clip_scale = 2/chunk_size; -constexpr auto shadow_length = chunk_size * 4; +constexpr auto shadow_length = chunk_size * 2; constexpr auto shadow_color = Vector4{0, 0, 0, 1}; +constexpr auto shadow_wall_depth = 4.f; } // namespace @@ -241,10 +242,22 @@ void lightmap_shader::add_geometry(Vector2i neighbor_offset, chunk& c) add_rect(neighbor_offset, whole_tile(i)); if (auto atlas = t.wall_north_atlas()) if (atlas->pass_mode(pass_mode::blocked) == pass_mode::blocked) - add_rect(neighbor_offset, wall_north(i)); + { + // todo check backface + auto start = tile_start(i); + auto min = start - Vector2(0, shadow_wall_depth), + max = start + Vector2(TILE_SIZE2[0], 0); + add_rect(neighbor_offset, {min, max}); + } if (auto atlas = t.wall_west_atlas()) if (atlas->pass_mode(pass_mode::blocked) == pass_mode::blocked) - add_rect(neighbor_offset, wall_west(i)); + { + // todo check backface + auto start = tile_start(i); + auto min = start - Vector2(shadow_wall_depth, 0), + max = start + Vector2(0, TILE_SIZE[1]); + add_rect(neighbor_offset, {min, max}); + } } } diff --git a/shaders/shader.hpp b/shaders/shader.hpp index 0f7100e0..06bf2928 100644 --- a/shaders/shader.hpp +++ b/shaders/shader.hpp @@ -10,7 +10,7 @@ namespace floormat { struct local_coords; -struct tile_shader final : GL::AbstractShaderProgram +struct tile_shader final : private GL::AbstractShaderProgram { using Position = GL::Attribute<0, Vector3>; using TextureCoordinates = GL::Attribute<1, Vector2>; |