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();
       }
     }