From 7867213a01fcabb1f05b1836c2ca59dc3bb2132f Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 11 Jan 2024 13:54:53 +0100 Subject: rename tile_atlas -> ground_atlas --- src/chunk-collision.cpp | 2 +- src/chunk-render.cpp | 2 +- src/chunk.cpp | 2 +- src/chunk.hpp | 4 ++-- src/ground-atlas.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ src/ground-atlas.hpp | 46 ++++++++++++++++++++++++++++++++++++++ src/tile-atlas.cpp | 59 ------------------------------------------------- src/tile-atlas.hpp | 46 -------------------------------------- src/tile-image.cpp | 4 ++-- src/tile-image.hpp | 6 ++--- src/tile.cpp | 12 +++++----- src/tile.hpp | 14 ++++++------ 12 files changed, 128 insertions(+), 128 deletions(-) create mode 100644 src/ground-atlas.cpp create mode 100644 src/ground-atlas.hpp delete mode 100644 src/tile-atlas.cpp delete mode 100644 src/tile-atlas.hpp (limited to 'src') diff --git a/src/chunk-collision.cpp b/src/chunk-collision.cpp index 4f94df6b..a6fd379d 100644 --- a/src/chunk-collision.cpp +++ b/src/chunk-collision.cpp @@ -1,5 +1,5 @@ #include "chunk.hpp" -#include "tile-atlas.hpp" +#include "ground-atlas.hpp" #include "object.hpp" #include "src/RTree-search.hpp" #include "src/chunk-scenery.hpp" diff --git a/src/chunk-render.cpp b/src/chunk-render.cpp index d019a948..ffaa33ec 100644 --- a/src/chunk-render.cpp +++ b/src/chunk-render.cpp @@ -1,5 +1,5 @@ #include "chunk.hpp" -#include "tile-atlas.hpp" +#include "ground-atlas.hpp" #include "quads.hpp" #include "shaders/shader.hpp" #include "compat/defs.hpp" diff --git a/src/chunk.cpp b/src/chunk.cpp index a49669c5..eaeb06e1 100644 --- a/src/chunk.cpp +++ b/src/chunk.cpp @@ -36,7 +36,7 @@ bool chunk::empty(bool force) const noexcept return true; } -tile_atlas* chunk::ground_atlas_at(size_t i) const noexcept { return _ground ? _ground->atlases[i].get() : nullptr; } +ground_atlas* chunk::ground_atlas_at(size_t i) const noexcept { return _ground ? _ground->atlases[i].get() : nullptr; } tile_ref chunk::operator[](size_t idx) noexcept { return { *this, uint8_t(idx) }; } tile_proto chunk::operator[](size_t idx) const noexcept { return tile_proto(tile_ref { *const_cast(this), uint8_t(idx) }); } diff --git a/src/chunk.hpp b/src/chunk.hpp index 3005475c..1f144ca7 100644 --- a/src/chunk.hpp +++ b/src/chunk.hpp @@ -103,7 +103,7 @@ struct chunk final void ensure_alloc_ground(); void ensure_alloc_walls(); ground_mesh_tuple ensure_ground_mesh() noexcept; - tile_atlas* ground_atlas_at(size_t i) const noexcept; + ground_atlas* ground_atlas_at(size_t i) const noexcept; wall_atlas* wall_atlas_at(size_t i) const noexcept; wall_mesh_tuple ensure_wall_mesh() noexcept; @@ -129,7 +129,7 @@ struct chunk final private: struct ground_stuff { - std::array, TILE_COUNT> atlases; + std::array, TILE_COUNT> atlases; std::array indexes = {}; std::array variants = {}; }; diff --git a/src/ground-atlas.cpp b/src/ground-atlas.cpp new file mode 100644 index 00000000..a64264ff --- /dev/null +++ b/src/ground-atlas.cpp @@ -0,0 +1,59 @@ +#include "ground-atlas.hpp" +#include "quads.hpp" +#include "compat/assert.hpp" +#include "tile-image.hpp" +#include "compat/exception.hpp" +#include +#include +#include +#include + +namespace floormat { + +using namespace floormat::Quads; + +ground_atlas::ground_atlas(StringView path, StringView name, const ImageView2D& image, Vector2ub tile_count, enum pass_mode p) : + texcoords_{make_texcoords_array(Vector2ui(image.size()), tile_count)}, + path_{path}, name_{name}, size_{image.size()}, dims_{tile_count}, passability{p} +{ + constexpr auto variant_max = std::numeric_limits::max(); + fm_soft_assert(num_tiles() <= variant_max); + fm_soft_assert(dims_[0] > 0 && dims_[1] > 0); + fm_soft_assert(size_ % Vector2ui{tile_count} == Vector2ui()); + tex_.setLabel(path_) + .setWrapping(GL::SamplerWrapping::ClampToEdge) + .setMagnificationFilter(GL::SamplerFilter::Nearest) + .setMinificationFilter(GL::SamplerFilter::Linear) + .setMaxAnisotropy(1) + .setBorderColor(Color4{1, 0, 0, 1}) + .setStorage(1, GL::textureFormat(image.format()), image.size()) + .setSubImage(0, {}, image); +} + +std::array ground_atlas::texcoords_for_id(size_t i) const +{ + fm_assert(i < num_tiles()); + return texcoords_[i]; +} + +auto ground_atlas::make_texcoords(Vector2ui pixel_size, Vector2ub tile_count, size_t i) -> texcoords +{ + const auto sz = pixel_size/Vector2ui{tile_count}; + const auto id = Vector2ui{ uint32_t(i % tile_count[0]), uint32_t(i / tile_count[0]) }; + const auto p0 = id * sz; + return texcoords_at(p0, sz, pixel_size); +} + +auto ground_atlas::make_texcoords_array(Vector2ui pixel_size, Vector2ub tile_count) -> std::unique_ptr +{ + const size_t N = Vector2ui{tile_count}.product(); + auto ptr = std::make_unique[]>(N); + for (auto i = 0uz; i < N; i++) + ptr[i] = make_texcoords(pixel_size, tile_count, i); + return ptr; +} + +size_t ground_atlas::num_tiles() const { return Vector2ui{dims_}.product(); } +enum pass_mode ground_atlas::pass_mode() const { return passability; } + +} // namespace floormat diff --git a/src/ground-atlas.hpp b/src/ground-atlas.hpp new file mode 100644 index 00000000..e6e2d5ba --- /dev/null +++ b/src/ground-atlas.hpp @@ -0,0 +1,46 @@ +#pragma once +#include "src/pass-mode.hpp" +#include "src/quads.hpp" +#include +#include +#include +#include +#include +#include +#include + +namespace floormat { + +class ground_atlas final +{ + using quad = Quads::quad; + using texcoords = std::array; + + static std::unique_ptr make_texcoords_array(Vector2ui pixel_size, Vector2ub tile_count); + static texcoords make_texcoords(Vector2ui pixel_size, Vector2ub tile_count, size_t i); + + std::unique_ptr texcoords_; + GL::Texture2D tex_; + String path_, name_; + Vector2ui size_; + Vector2ub dims_; + enum pass_mode passability; + +public: + ground_atlas(StringView path, StringView name, const ImageView2D& img, Vector2ub tile_count, enum pass_mode pass_mode); + + texcoords texcoords_for_id(size_t id) const; + + [[maybe_unused]] Vector2ui pixel_size() const { return size_; } + size_t num_tiles() const; + Vector2ub num_tiles2() const { return dims_; } + GL::Texture2D& texture() { return tex_; } + StringView name() const { return name_; } + enum pass_mode pass_mode() const; + + static constexpr enum pass_mode default_pass_mode = pass_mode::pass; +}; + + + +} // namespace floormat diff --git a/src/tile-atlas.cpp b/src/tile-atlas.cpp deleted file mode 100644 index 53156a84..00000000 --- a/src/tile-atlas.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "tile-atlas.hpp" -#include "quads.hpp" -#include "compat/assert.hpp" -#include "tile-image.hpp" -#include "compat/exception.hpp" -#include -#include -#include -#include - -namespace floormat { - -using namespace floormat::Quads; - -tile_atlas::tile_atlas(StringView path, StringView name, const ImageView2D& image, Vector2ub tile_count, enum pass_mode p) : - texcoords_{make_texcoords_array(Vector2ui(image.size()), tile_count)}, - path_{path}, name_{name}, size_{image.size()}, dims_{tile_count}, passability{p} -{ - constexpr auto variant_max = std::numeric_limits::max(); - fm_soft_assert(num_tiles() <= variant_max); - fm_soft_assert(dims_[0] > 0 && dims_[1] > 0); - fm_soft_assert(size_ % Vector2ui{tile_count} == Vector2ui()); - tex_.setLabel(path_) - .setWrapping(GL::SamplerWrapping::ClampToEdge) - .setMagnificationFilter(GL::SamplerFilter::Nearest) - .setMinificationFilter(GL::SamplerFilter::Linear) - .setMaxAnisotropy(1) - .setBorderColor(Color4{1, 0, 0, 1}) - .setStorage(1, GL::textureFormat(image.format()), image.size()) - .setSubImage(0, {}, image); -} - -std::array tile_atlas::texcoords_for_id(size_t i) const -{ - fm_assert(i < num_tiles()); - return texcoords_[i]; -} - -auto tile_atlas::make_texcoords(Vector2ui pixel_size, Vector2ub tile_count, size_t i) -> texcoords -{ - const auto sz = pixel_size/Vector2ui{tile_count}; - const auto id = Vector2ui{ uint32_t(i % tile_count[0]), uint32_t(i / tile_count[0]) }; - const auto p0 = id * sz; - return texcoords_at(p0, sz, pixel_size); -} - -auto tile_atlas::make_texcoords_array(Vector2ui pixel_size, Vector2ub tile_count) -> std::unique_ptr -{ - const size_t N = Vector2ui{tile_count}.product(); - auto ptr = std::make_unique[]>(N); - for (auto i = 0uz; i < N; i++) - ptr[i] = make_texcoords(pixel_size, tile_count, i); - return ptr; -} - -size_t tile_atlas::num_tiles() const { return Vector2ui{dims_}.product(); } -enum pass_mode tile_atlas::pass_mode() const { return passability; } - -} // namespace floormat diff --git a/src/tile-atlas.hpp b/src/tile-atlas.hpp deleted file mode 100644 index a4334b1a..00000000 --- a/src/tile-atlas.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once -#include "src/pass-mode.hpp" -#include "src/quads.hpp" -#include -#include -#include -#include -#include -#include -#include - -namespace floormat { - -class tile_atlas final -{ - using quad = Quads::quad; - using texcoords = std::array; - - static std::unique_ptr make_texcoords_array(Vector2ui pixel_size, Vector2ub tile_count); - static texcoords make_texcoords(Vector2ui pixel_size, Vector2ub tile_count, size_t i); - - std::unique_ptr texcoords_; - GL::Texture2D tex_; - String path_, name_; - Vector2ui size_; - Vector2ub dims_; - enum pass_mode passability; - -public: - tile_atlas(StringView path, StringView name, const ImageView2D& img, Vector2ub tile_count, enum pass_mode pass_mode); - - texcoords texcoords_for_id(size_t id) const; - - [[maybe_unused]] Vector2ui pixel_size() const { return size_; } - size_t num_tiles() const; - Vector2ub num_tiles2() const { return dims_; } - GL::Texture2D& texture() { return tex_; } - StringView name() const { return name_; } - enum pass_mode pass_mode() const; - - static constexpr enum pass_mode default_pass_mode = pass_mode::pass; -}; - - - -} // namespace floormat diff --git a/src/tile-image.cpp b/src/tile-image.cpp index 7bfea375..e2d84461 100644 --- a/src/tile-image.cpp +++ b/src/tile-image.cpp @@ -35,8 +35,8 @@ image_ref_& image_ref_::operator=(const Proto& proto return *this; } -template struct image_proto_; -template struct image_ref_; +template struct image_proto_; +template struct image_ref_; template struct image_proto_; template struct image_ref_; diff --git a/src/tile-image.hpp b/src/tile-image.hpp index facf9945..7292c5f0 100644 --- a/src/tile-image.hpp +++ b/src/tile-image.hpp @@ -4,7 +4,7 @@ namespace floormat { -class tile_atlas; +class ground_atlas; class wall_atlas; template @@ -30,8 +30,8 @@ struct image_ref_ final explicit operator bool() const noexcept; }; -using tile_image_proto = image_proto_; -using tile_image_ref = image_ref_; +using tile_image_proto = image_proto_; +using tile_image_ref = image_ref_; using wall_image_proto = image_proto_; using wall_image_ref = image_ref_; diff --git a/src/tile.cpp b/src/tile.cpp index ce21d506..c5eda401 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -18,13 +18,13 @@ wall_image_proto tile_proto::wall_west() const noexcept { return { wall_west_at tile_ref::tile_ref(struct chunk& c, uint8_t i) noexcept : _chunk{&c}, i{i} {} -std::shared_ptr tile_ref::ground_atlas() noexcept { return _chunk->_ground ? _chunk->_ground->atlases[i] : nullptr; } -std::shared_ptr tile_ref::wall_north_atlas() noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+0] : nullptr; } -std::shared_ptr tile_ref::wall_west_atlas() noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+1] : nullptr; } +std::shared_ptr tile_ref::ground_atlas() noexcept { return _chunk->_ground ? _chunk->_ground->atlases[i] : nullptr; } +std::shared_ptr tile_ref::wall_north_atlas() noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+0] : nullptr; } +std::shared_ptr tile_ref::wall_west_atlas() noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+1] : nullptr; } -std::shared_ptr tile_ref::ground_atlas() const noexcept { return _chunk->_ground ? _chunk->_ground->atlases[i] : nullptr; } -std::shared_ptr tile_ref::wall_north_atlas() const noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+0] : nullptr; } -std::shared_ptr tile_ref::wall_west_atlas() const noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+1] : nullptr; } +std::shared_ptr tile_ref::ground_atlas() const noexcept { return _chunk->_ground ? _chunk->_ground->atlases[i] : nullptr; } +std::shared_ptr tile_ref::wall_north_atlas() const noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+0] : nullptr; } +std::shared_ptr tile_ref::wall_west_atlas() const noexcept { return _chunk->_walls ? _chunk->_walls->atlases[i*2+1] : nullptr; } tile_image_ref tile_ref::ground() noexcept { _chunk->ensure_alloc_ground(); return {_chunk->_ground->atlases[i], _chunk->_ground->variants[i] }; } wall_image_ref tile_ref::wall_north() noexcept { _chunk->ensure_alloc_walls(); return {_chunk->_walls->atlases[i*2+0], _chunk->_walls->variants[i*2+0] }; } diff --git a/src/tile.hpp b/src/tile.hpp index efdd331b..a195eec4 100644 --- a/src/tile.hpp +++ b/src/tile.hpp @@ -8,7 +8,7 @@ class anim_atlas; struct tile_proto final { - std::shared_ptr ground_atlas; + std::shared_ptr ground_atlas; std::shared_ptr wall_north_atlas, wall_west_atlas; variant_t ground_variant = 0, wall_north_variant = 0, wall_west_variant = 0; @@ -31,13 +31,13 @@ struct tile_ref final wall_image_proto wall_north() const noexcept; wall_image_proto wall_west() const noexcept; - std::shared_ptr ground_atlas() noexcept; - std::shared_ptr wall_north_atlas() noexcept; - std::shared_ptr wall_west_atlas() noexcept; + std::shared_ptr ground_atlas() noexcept; + std::shared_ptr wall_north_atlas() noexcept; + std::shared_ptr wall_west_atlas() noexcept; - std::shared_ptr ground_atlas() const noexcept; - std::shared_ptr wall_north_atlas() const noexcept; - std::shared_ptr wall_west_atlas() const noexcept; + std::shared_ptr ground_atlas() const noexcept; + std::shared_ptr wall_north_atlas() const noexcept; + std::shared_ptr wall_west_atlas() const noexcept; explicit operator tile_proto() const noexcept; -- cgit v1.2.3