Skip to content
Snippets Groups Projects
Commit 2c8cca33 authored by Simon Oehrl's avatar Simon Oehrl
Browse files

Create an OpenGL buffer for 1D texture coords

#468
parent 42e18dec
No related branches found
No related tags found
1 merge request!161Feature/#468 access isosurface scalar
...@@ -107,15 +107,25 @@ void GeometryPass::UploadMeshData( ...@@ -107,15 +107,25 @@ void GeometryPass::UploadMeshData(
static_cast<GLsizeiptr>(mesh->GetNormals().size() * sizeof(glm::vec3)), static_cast<GLsizeiptr>(mesh->GetNormals().size() * sizeof(glm::vec3)),
mesh->GetNormals().data()); mesh->GetNormals().data());
const void* texture_coord_data = if (mesh->GetNumberOfTextureCoordComponents(0) == 1) {
mesh->GetNumberOfTextureCoordComponents(0) == 2 const void* texture_coord_data = mesh->GetTextureCoords()[0].data();
? mesh->GetTextureCoords()[0].data() rendering_resource_->tex_coords_buffer_1d.set_sub_data(
: nullptr; static_cast<GLintptr>(offset.vertex_offset *
rendering_resource_->tex_coords_buffer.set_sub_data( mesh->GetNumberOfTextureCoordComponents(0) *
static_cast<GLintptr>(offset.vertex_offset * sizeof(glm::vec2)), sizeof(float)),
static_cast<GLsizeiptr>(mesh->GetNumberOfTextureCoordComponents(0) * static_cast<GLsizeiptr>(mesh->GetNumberOfTextureCoordComponents(0) *
mesh->GetVertices().size() * sizeof(float)), mesh->GetVertices().size() * sizeof(float)),
texture_coord_data); 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; std::vector<unsigned int> shifted_indices;
shifted_indices.reserve(mesh->GetIndices().size()); shifted_indices.reserve(mesh->GetIndices().size());
...@@ -193,7 +203,9 @@ void GeometryPass::CreateRenderingResource() { ...@@ -193,7 +203,9 @@ void GeometryPass::CreateRenderingResource() {
rendering_resource_->vertex_buffer_size * sizeof(glm::vec3)); rendering_resource_->vertex_buffer_size * sizeof(glm::vec3));
rendering_resource_->normal_buffer.set_data( rendering_resource_->normal_buffer.set_data(
rendering_resource_->vertex_buffer_size * sizeof(glm::vec3)); 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_->vertex_buffer_size * sizeof(glm::vec2));
rendering_resource_->index_buffer.set_data( rendering_resource_->index_buffer.set_data(
rendering_resource_->index_buffer_size * sizeof(unsigned int)); rendering_resource_->index_buffer_size * sizeof(unsigned int));
...@@ -202,8 +214,10 @@ void GeometryPass::CreateRenderingResource() { ...@@ -202,8 +214,10 @@ void GeometryPass::CreateRenderingResource() {
sizeof(glm::vec3)); sizeof(glm::vec3));
CreateAttachVertexArrayVertexBuffer(rendering_resource_->normal_buffer, 1u, 3, CreateAttachVertexArrayVertexBuffer(rendering_resource_->normal_buffer, 1u, 3,
sizeof(glm::vec3)); sizeof(glm::vec3));
CreateAttachVertexArrayVertexBuffer(rendering_resource_->tex_coords_buffer, CreateAttachVertexArrayVertexBuffer(rendering_resource_->tex_coords_buffer_2d,
2u, 2, sizeof(glm::vec2)); 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_->vertex_array.set_element_buffer(
rendering_resource_->index_buffer); rendering_resource_->index_buffer);
......
...@@ -97,7 +97,8 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass { ...@@ -97,7 +97,8 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass {
gl::buffer vertex_buffer; gl::buffer vertex_buffer;
gl::buffer normal_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::buffer index_buffer;
gl::vertex_array vertex_array; gl::vertex_array vertex_array;
......
...@@ -55,8 +55,9 @@ SCENARIO( ...@@ -55,8 +55,9 @@ SCENARIO(
OPENGL_MOCK_ALLOW_ANY_CALL OPENGL_MOCK_ALLOW_ANY_CALL
const GLuint vertex_buffer_id = 1u; const GLuint vertex_buffer_id = 1u;
const GLuint normal_buffer_id = 2u; const GLuint normal_buffer_id = 2u;
const GLuint texCoord_buffer_id = 3u; const GLuint texCoord_buffer_1d_id = 3u;
const GLuint index_buffer_id = 4u; const GLuint texCoord_buffer_2d_id = 4u;
const GLuint index_buffer_id = 1u;
GIVEN("A geometry pass") { GIVEN("A geometry pass") {
phx::Entity camera; phx::Entity camera;
...@@ -140,7 +141,7 @@ SCENARIO( ...@@ -140,7 +141,7 @@ SCENARIO(
glNamedBufferSubData(normal_buffer_id, 0, glNamedBufferSubData(normal_buffer_id, 0,
3 * sizeof(glm::vec3), _)); 3 * sizeof(glm::vec3), _));
REQUIRE_CALL(open_gl_mock, REQUIRE_CALL(open_gl_mock,
glNamedBufferSubData(texCoord_buffer_id, 0, glNamedBufferSubData(texCoord_buffer_2d_id, 0,
3 * sizeof(glm::vec2), _)); 3 * sizeof(glm::vec2), _));
REQUIRE_CALL(open_gl_mock, REQUIRE_CALL(open_gl_mock,
glNamedBufferSubData(index_buffer_id, 0, glNamedBufferSubData(index_buffer_id, 0,
...@@ -213,7 +214,7 @@ SCENARIO( ...@@ -213,7 +214,7 @@ SCENARIO(
REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 1u, _, _)); REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 1u, _, _));
REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 2u, _, _)); REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 2u, _, _));
REQUIRE_CALL(open_gl_mock, glVertexArrayVertexBuffer(1u, _, 3u, _, _)); 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(); geometry_pass.Initialize();
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment