OpenGLMesh.ixx File
OpenGL-specific Mesh implementation and buffer management. More...
Included Headers
#include <glad/gl.h>
#include <memory>
#include <vector>
#include <stdexcept>
#include <string>
#include <helios.rendering.Vertex>
#include <helios.rendering.asset.shape.Shape>
#include <helios.rendering.mesh.MeshConfig>
#include <helios.rendering.mesh.Mesh>
Namespaces Index
| namespace | helios |
| namespace | ext |
|
Platform-specific extensions and backend implementations. More... | |
| namespace | opengl |
|
OpenGL-specific implementations. More... | |
| namespace | rendering |
|
OpenGL rendering implementations. More... | |
| namespace | model |
|
OpenGL mesh implementations. More... | |
Classes Index
| class | OpenGLMesh |
|
Representative of an OpenGLMesh. This class manages the OpenGL Vertex Array Object (VAO), the Vertex Buffer Object (VBO) and Element Buffer Object (EBO) handles. The raw mesh data is uploaded to the GPU, preparing it for subsequent rendering commands / draw calls. More... | |
Description
OpenGL-specific Mesh implementation and buffer management.
File Listing
The file content with the documentation metadata removed is:
20export namespace helios::ext::opengl::rendering::model {
29 class OpenGLMesh final : public helios::rendering::mesh::Mesh {
59 static unsigned int generateGLVertexArray() noexcept {
60 unsigned int vao;
61 glGenVertexArrays(1, &vao);
62 return vao;
72 static unsigned int generateGLBuffer() noexcept {
73 unsigned int vbo;
74 glGenBuffers(1, &vbo);
75 return vbo;
87 glBindVertexArray(vao_);
88 glBindBuffer(GL_ARRAY_BUFFER, vbo_);
92 vertices_->size() * sizeof(helios::rendering::Vertex),
93 &(*vertices_)[0],
97 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo_);
100 indices_->size() * sizeof(unsigned int),
101 &(*indices_)[0],
109 GL_FALSE, sizeof(helios::rendering::Vertex), nullptr
114 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(helios::rendering::Vertex),
115 reinterpret_cast<void*>(offsetof(helios::rendering::Vertex, normal))
120 glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(helios::rendering::Vertex),
121 reinterpret_cast<void*>(offsetof(helios::rendering::Vertex, texCoords))
134 OpenGLMesh(const OpenGLMesh&) = delete;
135 OpenGLMesh& operator=(const OpenGLMesh&) = delete;
145 * @throws std::invalid_argument if either "vertices", "indices" or meshConfig is a null shared pointer
147 explicit OpenGLMesh(
148 std::shared_ptr<const std::vector<helios::rendering::Vertex>> vertices,
149 std::shared_ptr<const std::vector<unsigned int>> indices,
150 std::shared_ptr<const helios::rendering::mesh::MeshConfig> meshConfig
152 Mesh(
153 std::move(vertices),
154 std::move(indices),
155 std::move(meshConfig)
157 vao_(generateGLVertexArray()),
158 vbo_(generateGLBuffer()),
159 ebo_(generateGLBuffer()) {
161 if (!vertices_ || !indices_ || !meshConfig_) {
163 logger_.error(msg);
170 OpenGLMesh::init();
182 explicit OpenGLMesh(
183 const helios::rendering::asset::shape::Shape& shape,
184 std::shared_ptr<const helios::rendering::mesh::MeshConfig> meshConfig
186 Mesh(
188 std::move(meshConfig)
190 vao_(generateGLVertexArray()),
191 vbo_(generateGLBuffer()),
192 ebo_(generateGLBuffer()) {
194 if (!vertices_ || !indices_ || !meshConfig_) {
196 logger_.error(msg);
204 OpenGLMesh::init();
216 ~OpenGLMesh() override {
217 glDeleteVertexArrays(1, &vao_);
218 glDeleteBuffers(1, &vbo_);
219 glDeleteBuffers(1, &ebo_);
228 return vao_;
237 return vbo_;
246 return ebo_;
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.