aboutsummaryrefslogtreecommitdiff
path: root/src/RenderBackend/OpenGL/ShaderFrame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/RenderBackend/OpenGL/ShaderFrame.cpp')
-rw-r--r--src/RenderBackend/OpenGL/ShaderFrame.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/RenderBackend/OpenGL/ShaderFrame.cpp b/src/RenderBackend/OpenGL/ShaderFrame.cpp
index 3f7ff01..dc2653c 100644
--- a/src/RenderBackend/OpenGL/ShaderFrame.cpp
+++ b/src/RenderBackend/OpenGL/ShaderFrame.cpp
@@ -7,7 +7,22 @@ namespace amalgine {
}
ShaderFrame::~ShaderFrame() {
- glDeleteVertexArrays(1, &vertex_array_object_id);
+ if(vertex_array_object_id != -1)
+ glDeleteVertexArrays(1, &vertex_array_object_id);
+ }
+
+ ShaderFrame::ShaderFrame(ShaderFrame &&other) {
+ this->operator=(std::move(other));
+ }
+
+ ShaderFrame& ShaderFrame::operator=(ShaderFrame &&other) {
+ shader_program_id = other.shader_program_id;
+ vertex_array_object_id = other.vertex_array_object_id;
+ shader_inputs = std::move(other.shader_inputs);
+
+ other.shader_program_id = -1;
+ other.vertex_array_object_id = -1;
+ return *this;
}
DeviceMemory* ShaderFrame::get_input_by_name(const char *name) {
@@ -44,10 +59,23 @@ namespace amalgine {
glUseProgram(shader_program_id);
glBindVertexArray(vertex_array_object_id); // Set the active shader to use the data encapsulated by the vertex array object
// TODO: Cache this num_vertices count (and reset it when device memory has changed)
+#if 0
int num_vertices = 0;
for(const auto &it : shader_inputs) {
num_vertices = std::max(num_vertices, it.second->get_num_vertices());
}
+#endif
+ int num_vertices = 0;
+ for(const auto &it : shader_inputs) {
+ int new_num_vertices = std::max(num_vertices, it.second->get_num_vertices());
+#if 0
+ if(num_vertices != 0 && new_num_vertices != num_vertices) {
+ fprintf(stderr, "All inputs for shaders need to be of the same size!\n");
+ abort();
+ }
+#endif
+ num_vertices = new_num_vertices;
+ }
// TODO: Allow specifying mode different than GL_TRIANGLES
glDrawArrays(GL_TRIANGLES, 0, num_vertices);
}