summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--draw/wireframe.cpp9
-rw-r--r--draw/wireframe.hpp20
-rw-r--r--editor/app.hpp9
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;