1#ifndef OE_RENDER_MESH_H
2#define OE_RENDER_MESH_H
9#include "../util/non_copyable.h"
11#include "../scene/vertex.h"
33 constexpr int32_t getComponentSize<float>() noexcept
39 constexpr int32_t getComponentSize<glm::vec2>() noexcept
45 constexpr int32_t getComponentSize<glm::vec3>() noexcept
51 constexpr int32_t getComponentSize<glm::vec4>() noexcept
57 constexpr int32_t getComponentSize<glm::ivec4>() noexcept
87 void renderArrays(
const uint32_t count,
const uint32_t offset = 0,
const uint32_t mode = 0x0004);
92 void setSubBufferData(
const uint32_t size,
const void* data,
const uint32_t offset = 0);
112 template <
typename V>
115 void enableVertexAttribPointer(uint32_t index,
size_t offset,
size_t total, int32_t componentCount);
117 void enableVertexAttribIPointer(uint32_t index,
size_t offset,
size_t total, int32_t componentCount);
125 template <
typename VertexType,
typename T>
128 bindVertexAttributeToPointer<T>(index, offset,
sizeof(VertexType));
131 template <
typename ComponentType>
134 enableVertexAttribPointer(index, offset, total, getComponentSize<ComponentType>());
145 void _prepare_mesh_vao(
const size_t vertex_size,
const size_t count,
const void* data,
const bool editable =
false);
147 uint32_t _prepare_mesh_ebo(
const size_t size,
const void* data,
const bool editable =
false);
161 template <
typename V>
165 _prepare_mesh_vao(
sizeof(V), max_count,
nullptr,
true);
166 bindVertexAttributes<V>();
172 template <
typename V>
176 _prepare_mesh_vao(
sizeof(V), max_vertices_count,
nullptr,
true);
177 _indices_size = max_indices_count;
178 _ebo = _prepare_mesh_ebo(max_indices_count *
sizeof(
oe::scene::index_t),
nullptr,
true);
179 bindVertexAttributes<V>();
187 void render(
const uint32_t offset = 0,
const uint32_t mode = 0x0004);
193 void renderElements(
const uint32_t count,
const uint32_t offset = 0,
const uint32_t mode = 0x0004);
198 void setIndicesData(
const uint32_t size,
const void* data,
const uint32_t offset = 0);
208 void releaseRawBuffers();
211 uint32_t _indices_size = 0;
242 template <
typename M>
246 const std::vector<typename M::vertex_type>& vertices = mesh.getVertices();
248 _prepare_mesh_vao(
sizeof(
typename M::vertex_type), vertices.size(), vertices.data());
249 bindVertexAttributes<typename M::vertex_type>();
251 for (
size_t i=0; i<mesh.getSubMeshCount(); ++i)
253 const std::vector<oe::scene::index_t>& indices = mesh.getIndices(i);
255 _ebos.push_back({_prepare_mesh_ebo(indices.size() *
sizeof(
oe::scene::index_t), indices.data()), indices.size()});
266 void render(
const uint32_t sub_mesh = 0,
const uint32_t mode = 0x0004,
const uint32_t offset = 0);
269 std::vector<std::pair<uint32_t, uint32_t>> _ebos;
void bindVertexAttributes()
void bindVertexAttributeToPointer(const uint32_t index, const size_t offset) noexcept
Definition mesh.h:126
void setSubBufferData(const uint32_t size, const void *data, const uint32_t offset=0)
void renderArrays(const uint32_t count, const uint32_t offset=0, const uint32_t mode=0x0004)
A mesh where the vertices/indices are dynamic.
Definition mesh.h:156
void render(const uint32_t offset=0, const uint32_t mode=0x0004)
DynamicMesh(const V &, uint32_t max_count, const MeshUsage usage=MeshUsage::DYNAMIC)
Definition mesh.h:162
DynamicMesh(const V &, uint32_t max_vertices_count, uint32_t max_indices_count, const MeshUsage usage=MeshUsage::DYNAMIC)
Definition mesh.h:173
void renderElements(const uint32_t count, const uint32_t offset=0, const uint32_t mode=0x0004)
std::pair< void *, void * > getRawBuffers()
void setIndicesData(const uint32_t size, const void *data, const uint32_t offset=0)
GPU mesh wrapper.
Definition mesh.h:236
void render(const uint32_t sub_mesh=0, const uint32_t mode=0x0004, const uint32_t offset=0)
Mesh(const M &mesh, const MeshUsage usage=MeshUsage::STATIC)
Definition mesh.h:243
Prevent class to be copied.
Definition non_copyable.h:12
Render related abstractions (Shader, Framebuffer, Cubemaps, Textures)
Definition opengl.h:10
MeshUsage
Specify how the mesh data will be used.
Definition mesh.h:66
int32_t getComponentSize() noexcept
Definition mesh.h:26
Scene related management (Render-agnostic Geometry, Manger, etc...)
Definition debug.h:19
uint32_t index_t
Definition vertex.h:17