diff --git a/library/phx/rendering/render_passes/geometry_pass.cpp b/library/phx/rendering/render_passes/geometry_pass.cpp index fe5812c135013a524ceb5b34fac79aff9e4eb60a..54c4594d0d53ee30a02d0b950d0a9a485d408c0c 100644 --- a/library/phx/rendering/render_passes/geometry_pass.cpp +++ b/library/phx/rendering/render_passes/geometry_pass.cpp @@ -107,15 +107,25 @@ void GeometryPass::UploadMeshData( static_cast<GLsizeiptr>(mesh->GetNormals().size() * sizeof(glm::vec3)), mesh->GetNormals().data()); - const void* texture_coord_data = - mesh->GetNumberOfTextureCoordComponents(0) == 2 - ? mesh->GetTextureCoords()[0].data() - : nullptr; - rendering_resource_->tex_coords_buffer.set_sub_data( - static_cast<GLintptr>(offset.vertex_offset * sizeof(glm::vec2)), - static_cast<GLsizeiptr>(mesh->GetNumberOfTextureCoordComponents(0) * - mesh->GetVertices().size() * sizeof(float)), - texture_coord_data); + if (mesh->GetNumberOfTextureCoordComponents(0) == 1) { + const void* texture_coord_data = mesh->GetTextureCoords()[0].data(); + rendering_resource_->tex_coords_buffer_1d.set_sub_data( + static_cast<GLintptr>(offset.vertex_offset * + mesh->GetNumberOfTextureCoordComponents(0) * + sizeof(float)), + static_cast<GLsizeiptr>(mesh->GetNumberOfTextureCoordComponents(0) * + mesh->GetVertices().size() * sizeof(float)), + texture_coord_data); + } else if (mesh->GetNumberOfTextureCoordComponents(0) == 2) { + const void* texture_coord_data = mesh->GetTextureCoords()[0].data(); + rendering_resource_->tex_coords_buffer_2d.set_sub_data( + static_cast<GLintptr>(offset.vertex_offset * + mesh->GetNumberOfTextureCoordComponents(0) * + sizeof(float)), + static_cast<GLsizeiptr>(mesh->GetNumberOfTextureCoordComponents(0) * + mesh->GetVertices().size() * sizeof(float)), + texture_coord_data); + } std::vector<unsigned int> shifted_indices; shifted_indices.reserve(mesh->GetIndices().size()); @@ -193,7 +203,9 @@ void GeometryPass::CreateRenderingResource() { rendering_resource_->vertex_buffer_size * sizeof(glm::vec3)); rendering_resource_->normal_buffer.set_data( rendering_resource_->vertex_buffer_size * sizeof(glm::vec3)); - rendering_resource_->tex_coords_buffer.set_data( + rendering_resource_->tex_coords_buffer_1d.set_data( + rendering_resource_->vertex_buffer_size * sizeof(float)); + rendering_resource_->tex_coords_buffer_2d.set_data( rendering_resource_->vertex_buffer_size * sizeof(glm::vec2)); rendering_resource_->index_buffer.set_data( rendering_resource_->index_buffer_size * sizeof(unsigned int)); @@ -202,8 +214,10 @@ void GeometryPass::CreateRenderingResource() { sizeof(glm::vec3)); CreateAttachVertexArrayVertexBuffer(rendering_resource_->normal_buffer, 1u, 3, sizeof(glm::vec3)); - CreateAttachVertexArrayVertexBuffer(rendering_resource_->tex_coords_buffer, + CreateAttachVertexArrayVertexBuffer(rendering_resource_->tex_coords_buffer_2d, 2u, 2, sizeof(glm::vec2)); + CreateAttachVertexArrayVertexBuffer(rendering_resource_->tex_coords_buffer_1d, + 3u, 1, sizeof(glm::vec2)); rendering_resource_->vertex_array.set_element_buffer( rendering_resource_->index_buffer); diff --git a/library/phx/rendering/render_passes/geometry_pass.hpp b/library/phx/rendering/render_passes/geometry_pass.hpp index a02733159fc998a2b8547c5565932bbf118e1203..280139743bc9328bb9e4fab8ae1971c55a84f2ae 100644 --- a/library/phx/rendering/render_passes/geometry_pass.hpp +++ b/library/phx/rendering/render_passes/geometry_pass.hpp @@ -97,7 +97,8 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass { gl::buffer vertex_buffer; gl::buffer normal_buffer; - gl::buffer tex_coords_buffer; + gl::buffer tex_coords_buffer_1d; + gl::buffer tex_coords_buffer_2d; gl::buffer index_buffer; gl::vertex_array vertex_array; diff --git a/tests/src/test_geometry_pass.cpp b/tests/src/test_geometry_pass.cpp index 15c7e70817d7766dcc1a8516537ed8c5571c6f05..9eb4733422833e0a28a37db68e09c0867e3912ae 100644 --- a/tests/src/test_geometry_pass.cpp +++ b/tests/src/test_geometry_pass.cpp @@ -55,8 +55,9 @@ SCENARIO( OPENGL_MOCK_ALLOW_ANY_CALL const GLuint vertex_buffer_id = 1u; const GLuint normal_buffer_id = 2u; - const GLuint texCoord_buffer_id = 3u; - const GLuint index_buffer_id = 4u; + const GLuint texCoord_buffer_1d_id = 3u; + const GLuint texCoord_buffer_2d_id = 4u; + const GLuint index_buffer_id = 1u; GIVEN("A geometry pass") { phx::Entity camera; @@ -140,7 +141,7 @@ SCENARIO( glNamedBufferSubData(normal_buffer_id, 0, 3 * sizeof(glm::vec3), _)); REQUIRE_CALL(open_gl_mock, - glNamedBufferSubData(texCoord_buffer_id, 0, + glNamedBufferSubData(texCoord_buffer_2d_id, 0, 3 * sizeof(glm::vec2), _)); REQUIRE_CALL(open_gl_mock, glNamedBufferSubData(index_buffer_id, 0, @@ -213,7 +214,7 @@ SCENARIO( REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 1u, _, _)); REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 2u, _, _)); REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 3u, _, _)); - REQUIRE_CALL(open_gl_mock, glVertexArrayElementBuffer(1u, 4u)); + REQUIRE_CALL(open_gl_mock, glVertexArrayElementBuffer(1u, 1u)); geometry_pass.Initialize(); } }