summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-10-09 03:11:56 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-10-09 03:11:56 +0200
commitacdace16824b741948b02da0bcc7d0d059c7f683 (patch)
tree1ffd35712af0a9412477e678310a82ba3988ccf3 /src
parent542bc1c103f129c2f648dbe77affb485cfdf93ab (diff)
a
Diffstat (limited to 'src')
-rw-r--r--src/wireframe-mesh.cpp35
-rw-r--r--src/wireframe-mesh.hpp19
2 files changed, 19 insertions, 35 deletions
diff --git a/src/wireframe-mesh.cpp b/src/wireframe-mesh.cpp
index 1332c682..e03723bf 100644
--- a/src/wireframe-mesh.cpp
+++ b/src/wireframe-mesh.cpp
@@ -1,6 +1,7 @@
#include "wireframe-mesh.hpp"
#include "shaders/tile-shader.hpp"
#include "tile-atlas.hpp"
+#include "compat/assert.hpp"
#include <Corrade/Containers/Array.h>
#include <Magnum/GL/Renderer.h>
#include <Magnum/GL/TextureFormat.h>
@@ -31,23 +32,13 @@ GL::RectangleTexture wireframe::null::make_constant_texture()
quad::vertex_array quad::make_vertex_array() const
{
-#if 0
- constexpr auto X = TILE_SIZE[0], Y = TILE_SIZE[1];
- constexpr float Z = 0;
+ constexpr auto X = TILE_SIZE[0]*.5f, Y = TILE_SIZE[1]*.5f;
return {{
- { -X + center[0], -Y + center[1], Z + center[2] },
- { X + center[0], -Y + center[1], Z + center[2] },
- { X + center[0], Y + center[1], Z + center[2] },
- { -X + center[0], Y + center[1], Z + center[2] },
+ { -X + center[0], -Y + center[1], center[2] },
+ { X + center[0], -Y + center[1], center[2] },
+ { X + center[0], Y + center[1], center[2] },
+ { -X + center[0], Y + center[1], center[2] },
}};
-#else
- return tile_atlas::floor_quad(center, {TILE_SIZE[0], TILE_SIZE[1]});
-#endif
-}
-
-quad::index_array quad::make_index_array()
-{
- return tile_atlas::indices(0);
}
quad::quad(Vector3 center, Vector2 size) : center(center), size(size) {}
@@ -58,17 +49,17 @@ namespace Magnum::Examples {
template <wireframe::traits T> wireframe_mesh<T>::wireframe_mesh()
{
- _mesh.setCount((int)T::num_indexes)
- .addVertexBuffer(_texcoords_buffer, 0, tile_shader::TextureCoordinates{})
- .addVertexBuffer(_vertex_buffer, 0, tile_shader::Position{})
- .setIndexBuffer(_index_buffer, 0, GL::MeshIndexType::UnsignedShort);
+ _mesh.setCount((int)T::num_vertices)
+ .setPrimitive(T::primitive)
+ .addVertexBuffer(_vertex_buffer, 0, tile_shader::Position{})
+ .addVertexBuffer(_texcoords_buffer, 0, tile_shader::TextureCoordinates{});
}
template <wireframe::traits T> void wireframe_mesh<T>::draw(tile_shader& shader, T x)
{
- GL::Renderer::setLineWidth(2);
- _vertex_buffer.setSubData(0, x.make_vertex_array());
- _index_buffer.setSubData(0, x.make_index_array());
+ GL::Renderer::setLineWidth(3);
+ auto array = x.make_vertex_array();
+ _vertex_buffer.setSubData(0, array);
_texture.bind(0);
shader.draw(_mesh);
}
diff --git a/src/wireframe-mesh.hpp b/src/wireframe-mesh.hpp
index 2a7cf10c..26dfb9ec 100644
--- a/src/wireframe-mesh.hpp
+++ b/src/wireframe-mesh.hpp
@@ -19,38 +19,32 @@ namespace wireframe
template<typename T>
concept traits = requires (const T& x) {
{T::num_vertices} -> std::convertible_to<std::size_t>;
- {T::num_indexes} -> std::convertible_to<std::size_t>;
{x.primitive} -> std::convertible_to<GL::MeshPrimitive>;
{x.make_vertex_array() } -> std::same_as<std::array<Vector3, T::num_vertices>>;
- {x.make_index_array() } -> std::same_as<std::array<UnsignedShort, T::num_indexes>>;
};
struct null final
{
static constexpr auto primitive = GL::MeshPrimitive::Triangles;
- static constexpr std::size_t num_vertices = 0, num_indexes = 0;
+ static constexpr std::size_t num_vertices = 0;
static GL::RectangleTexture make_constant_texture();
static std::array<Vector3, 0> make_vertex_array() { return {}; }
- static std::array<UnsignedShort, 0> make_index_array() { return {}; }
};
struct quad final
{
quad(Vector3 center, Vector2 size);
- constexpr quad() = default;
- static constexpr std::size_t num_vertices = 4, num_indexes = 6;
- static constexpr GL::MeshPrimitive primitive = GL::MeshPrimitive::Triangles;
+ static constexpr std::size_t num_vertices = 4;
+ static constexpr GL::MeshPrimitive primitive = GL::MeshPrimitive::LineLoop;
using vertex_array = std::array<Vector3, num_vertices>;
- using index_array = std::array<UnsignedShort, num_indexes>;
vertex_array make_vertex_array() const;
- static index_array make_index_array() ;
private:
- Vector3 center = {};
- Vector2 size = { TILE_SIZE[0], TILE_SIZE[1] };
+ Vector3 center;
+ Vector2 size;
};
} // namespace wireframe
@@ -63,8 +57,7 @@ struct wireframe_mesh final
private:
GL::Buffer _vertex_buffer{std::array<Vector3, T::num_vertices>{}, GL::BufferUsage::DynamicDraw},
- _texcoords_buffer{std::array<Vector2, T::num_vertices>{}, GL::BufferUsage::DynamicDraw},
- _index_buffer{std::array<UnsignedShort , T::num_indexes>{}, GL::BufferUsage::DynamicDraw};
+ _texcoords_buffer{std::array<Vector2, T::num_vertices>{}, GL::BufferUsage::DynamicDraw};
GL::RectangleTexture _texture = wireframe::null::make_constant_texture();
GL::Mesh _mesh;
};