summaryrefslogtreecommitdiffhomepage
path: root/draw
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-11-12 10:32:18 +0100
committerStanislaw Halik <sthalik@misaki.pl>2022-11-12 10:32:18 +0100
commitd2a777416200a7d7d0df910a5e7b2de99a1bc00e (patch)
tree46bb49d4545bf2413c0829b8f2217391c29ad797 /draw
parentc8f0c67d56716bde17b8699c300332eeac9fd0c4 (diff)
reuse the wireframe 1x1 texture
Diffstat (limited to 'draw')
-rw-r--r--draw/wireframe.cpp9
-rw-r--r--draw/wireframe.hpp20
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}
{
}