From 9ab59b76c0ece5e261c0152af3f830f48532e103 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 22 Feb 2020 08:55:48 +0100 Subject: Fix rendering of character --- src/RenderBackend/OpenGL/ShaderFrame.cpp | 30 +++++++++++++++++++++++++++++- src/RenderBackend/OpenGL/Texture2D.cpp | 2 +- 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'src/RenderBackend/OpenGL') 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); } diff --git a/src/RenderBackend/OpenGL/Texture2D.cpp b/src/RenderBackend/OpenGL/Texture2D.cpp index 7d1b83c..089a5f1 100644 --- a/src/RenderBackend/OpenGL/Texture2D.cpp +++ b/src/RenderBackend/OpenGL/Texture2D.cpp @@ -72,9 +72,9 @@ namespace amalgine { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glGenerateMipmap(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glGenerateMipmap(GL_TEXTURE_2D); } Texture2D::~Texture2D() -- cgit v1.2.3