summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-01-11 13:35:19 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-01-11 13:35:19 +0100
commit8da414ed881af4f30905c1e20fc4d579ed1fb2f1 (patch)
tree42c28927373e2382c7b73a638f144f7196d28969
parent0b6a28eaf5973f0485ae8a6f869ebb543b1e470c (diff)
fix wall corner depth value vs critter/scenery
-rw-r--r--shaders/shader.cpp7
-rw-r--r--shaders/shader.hpp1
-rw-r--r--src/chunk-walls.cpp8
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)