diff options
-rw-r--r-- | draw/wireframe.cpp | 9 | ||||
-rw-r--r-- | draw/wireframe.hpp | 20 | ||||
-rw-r--r-- | editor/app.hpp | 9 |
3 files changed, 20 insertions, 18 deletions
diff --git a/draw/wireframe.cpp b/draw/wireframe.cpp index bf024f9e..2a41d5c2 100644 --- a/draw/wireframe.cpp +++ b/draw/wireframe.cpp @@ -13,7 +13,7 @@ namespace floormat::wireframe { -GL::Texture2D mesh_base::make_constant_texture() +GL::Texture2D make_constant_texture() { const Vector4ub data[] = { {255, 255, 255, 255} }; Trade::ImageData2D img{PixelFormat::RGBA8Unorm, {1, 1}, {}, @@ -33,10 +33,11 @@ struct constant_buf { }; mesh_base::mesh_base(GL::MeshPrimitive primitive, ArrayView<const void> index_data, - std::size_t num_vertices, std::size_t num_indexes) : + std::size_t num_vertices, std::size_t num_indexes, GL::Texture2D* texture) : _vertex_buffer{Containers::Array<Vector3>{ValueInit, num_vertices}, GL::BufferUsage::DynamicDraw}, _constant_buffer{Containers::Array<constant_buf>{ValueInit, num_vertices}}, - _index_buffer{num_indexes == 0 ? GL::Buffer{NoCreate} : GL::Buffer{index_data}} + _index_buffer{num_indexes == 0 ? GL::Buffer{NoCreate} : GL::Buffer{index_data}}, + _texture{texture} { _mesh.setCount((int)(num_indexes > 0 ? num_indexes : num_vertices)) .setPrimitive(primitive) @@ -48,7 +49,7 @@ mesh_base::mesh_base(GL::MeshPrimitive primitive, ArrayView<const void> index_da void mesh_base::draw(tile_shader& shader) { - _texture.bind(0); + _texture->bind(0); shader.draw(_mesh); } diff --git a/draw/wireframe.hpp b/draw/wireframe.hpp index 400fbee7..e0dd72cc 100644 --- a/draw/wireframe.hpp +++ b/draw/wireframe.hpp @@ -9,8 +9,7 @@ namespace floormat { struct tile_shader; -namespace wireframe -{ +namespace wireframe { template<typename T> concept traits = requires (const T& x) { @@ -22,15 +21,16 @@ concept traits = requires (const T& x) { {x.on_draw()} -> std::same_as<void>; }; -struct mesh_base -{ - static GL::Texture2D make_constant_texture(); +GL::Texture2D make_constant_texture(); + +struct mesh_base { +protected: GL::Buffer _vertex_buffer{{}, GL::BufferUsage::DynamicDraw}, _constant_buffer, _index_buffer; - GL::Texture2D _texture = make_constant_texture(); + GL::Texture2D* _texture; GL::Mesh _mesh; mesh_base(GL::MeshPrimitive primitive, ArrayView<const void> index_data, - std::size_t num_vertices, std::size_t num_indexes); + std::size_t num_vertices, std::size_t num_indexes, GL::Texture2D* texture); void draw(tile_shader& shader); void set_subdata(ArrayView<const void> array); }; @@ -40,13 +40,13 @@ struct mesh_base template<wireframe::traits T> struct wireframe_mesh final : private wireframe::mesh_base { - wireframe_mesh(); + wireframe_mesh(GL::Texture2D& constant_texture); void draw(tile_shader& shader, T traits); }; template<wireframe::traits T> -wireframe_mesh<T>::wireframe_mesh() : - wireframe::mesh_base{T::primitive, T::make_index_array(), T::num_vertices, T::num_indexes} +wireframe_mesh<T>::wireframe_mesh(GL::Texture2D& constant_texture) : + wireframe::mesh_base{T::primitive, T::make_index_array(), T::num_vertices, T::num_indexes, &constant_texture} { } diff --git a/editor/app.hpp b/editor/app.hpp index c161a2aa..6be1eed3 100644 --- a/editor/app.hpp +++ b/editor/app.hpp @@ -99,10 +99,11 @@ private: ImGuiIntegration::Context _imgui{NoCreate}; std::shared_ptr<tile_atlas> _floor1, _floor2, _wall1, _wall2; std::shared_ptr<anim_atlas> _door; - wireframe_mesh<wireframe::quad_floor> _wireframe_quad; - wireframe_mesh<wireframe::quad_wall_n> _wireframe_wall_n; - wireframe_mesh<wireframe::quad_wall_w> _wireframe_wall_w; - wireframe_mesh<wireframe::box> _wireframe_box; + GL::Texture2D _wireframe_texture = wireframe::make_constant_texture(); + wireframe_mesh<wireframe::quad_floor> _wireframe_quad {_wireframe_texture}; + wireframe_mesh<wireframe::quad_wall_n> _wireframe_wall_n {_wireframe_texture}; + wireframe_mesh<wireframe::quad_wall_w> _wireframe_wall_w {_wireframe_texture}; + wireframe_mesh<wireframe::box> _wireframe_box {_wireframe_texture}; editor _editor; key_set keys; std::array<int, key_set::COUNT> key_modifiers; |