From 8da414ed881af4f30905c1e20fc4d579ed1fb2f1 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 11 Jan 2024 13:35:19 +0100 Subject: fix wall corner depth value vs critter/scenery --- shaders/shader.cpp | 7 ++++++- shaders/shader.hpp | 1 + src/chunk-walls.cpp | 8 ++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/shaders/shader.cpp b/shaders/shader.cpp index a276f053..a4ec9dad 100644 --- a/shaders/shader.cpp +++ b/shaders/shader.cpp @@ -98,7 +98,12 @@ void tile_shader::draw_post(GL::AbstractTexture& tex) // NOLINT(*-convert-member float tile_shader::depth_value(const local_coords& xy, float offset) noexcept { - return ((float)xy.x + (float)xy.y + offset) * depth_tile_size; + return depth_value((float)xy.x, (float)xy.y, offset); +} + +float tile_shader::depth_value(float x, float y, float offset) noexcept +{ + return (x + y + offset) * depth_tile_size; } } // namespace floormat diff --git a/shaders/shader.hpp b/shaders/shader.hpp index cb79fe94..56659218 100644 --- a/shaders/shader.hpp +++ b/shaders/shader.hpp @@ -31,6 +31,7 @@ struct tile_shader final : private GL::AbstractShaderProgram tile_shader& set_tint(const Vector4& tint); float depth_offset() const { return _depth_offset; } static float depth_value(const local_coords& xy, float offset = 0) noexcept; + static float depth_value(float x, float y, float offset = 0) noexcept; bool is_lightmap_enabled() const { return _enable_lightmap; } tile_shader& set_lightmap_enabled(bool value); diff --git a/src/chunk-walls.cpp b/src/chunk-walls.cpp index 6918248c..a9b432d6 100644 --- a/src/chunk-walls.cpp +++ b/src/chunk-walls.cpp @@ -241,6 +241,8 @@ GL::Mesh chunk::make_wall_mesh() { const auto frames = atlas->frames(dir.corner); auto variant = (variant_ != (uint8_t)-1 ? variant_ : vpos); + const auto depth_offset = depth_offset_for_group(Group_::corner, is_west); + const auto depth = tile_shader::depth_value(!is_west ? (float)pos.x : (float)pos.x - 1, depth_offset); variant += !is_west ? frames.size() - 1 : 1; variant = variant % frames.size(); const auto& frame = frames[variant]; @@ -248,8 +250,6 @@ GL::Mesh chunk::make_wall_mesh() const auto i = N++; fm_assert(i < vertexes.size()); _walls->mesh_indexes[i] = (uint16_t)k; - const auto depth_offset = depth_offset_for_group(Group_::corner, is_west); - const auto depth = tile_shader::depth_value(pos, depth_offset); auto& v = vertexes[i]; auto quad = get_quad(D, Group_::corner, Depth); for (auto& v : quad) @@ -261,6 +261,8 @@ GL::Mesh chunk::make_wall_mesh() { const auto frames = atlas->frames(dir.wall); auto variant = (variant_ != (uint8_t)-1 ? variant_ : vpos); + const auto depth_offset = depth_offset_for_group(Group_::corner, is_west); + const auto depth = tile_shader::depth_value(!is_west ? (float)pos.x : (float)pos.x - 1, depth_offset); variant += !is_west ? frames.size() - 1 : 1; variant %= frames.size(); const auto& frame = frames[variant]; @@ -270,8 +272,6 @@ GL::Mesh chunk::make_wall_mesh() const auto i = N++; fm_assert(i < vertexes.size()); _walls->mesh_indexes[i] = (uint16_t)k; - const auto depth_offset = depth_offset_for_group(Group_::corner, is_west); - const auto depth = tile_shader::depth_value(pos, depth_offset); auto& v = vertexes[i]; auto quad = get_quad(D, Group_::corner, Depth); for (auto& v : quad) -- cgit v1.2.3