diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-12 10:32:18 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-11-12 10:32:18 +0100 |
commit | d2a777416200a7d7d0df910a5e7b2de99a1bc00e (patch) | |
tree | 46bb49d4545bf2413c0829b8f2217391c29ad797 /draw | |
parent | c8f0c67d56716bde17b8699c300332eeac9fd0c4 (diff) |
reuse the wireframe 1x1 texture
Diffstat (limited to 'draw')
-rw-r--r-- | draw/wireframe.cpp | 9 | ||||
-rw-r--r-- | draw/wireframe.hpp | 20 |
2 files changed, 15 insertions, 14 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} { } |