diff --git a/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.c b/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.c index e257cf8..03aa0aa 100644 --- a/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.c +++ b/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.c @@ -10,6 +10,9 @@ gnReturnCode openglCommandPoolAllocateCommandBuffers(gnCommandBufferHandle* comm commandBuffers[i]->commandBuffer = &pool->commandPool->commandBuffers[c]; commandBuffers[i]->commandBuffer->commmandRunner = openglCreateCommandRunner(); + commandBuffers[i]->commandBuffer->boundVertexBuffer = GN_NULL_HANDLE; + commandBuffers[i]->commandBuffer->boundIndexBuffer = GN_NULL_HANDLE; + // glGenBuffers(1, &commandBuffers[i]->commandBuffer->vertexBuffer); // glBindBuffer(GL_ARRAY_BUFFER, commandBuffers[i]->commandBuffer->vertexBuffer); // glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW); diff --git a/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.h b/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.h index a62f427..12dd16d 100644 --- a/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.h +++ b/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.h @@ -7,6 +7,7 @@ typedef struct gnPlatformCommandBuffer_t { int index; openglCommandRunner commmandRunner; gnGraphicsPipeline boundGraphicsPipeline; + gnBuffer boundVertexBuffer, boundIndexBuffer; } gnPlatformCommandBuffer; gnReturnCode openglCommandPoolAllocateCommandBuffers(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPoolHandle pool); diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp index f6d6611..5bafb3c 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp @@ -36,8 +36,17 @@ GN_CPP_FUNCTION void openglBindGraphicsPipeline(gnCommandBuffer commandBuffer, g gnCommandBuffer buffer = commandBuffer; openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([buffer, pipeline]{ buffer->commandBuffer->boundGraphicsPipeline = pipeline; - glBindVertexArray(buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->vertexArrayObject); + + if (buffer->commandBuffer->boundVertexBuffer != GN_NULL_HANDLE) + glVertexArrayVertexBuffer( + buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->vertexArrayObject, 0, + buffer->commandBuffer->boundVertexBuffer->buffer->id, 0, + buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->stride + ); + if (buffer->commandBuffer->boundIndexBuffer != GN_NULL_HANDLE) + glVertexArrayElementBuffer(buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->vertexArrayObject, buffer->commandBuffer->boundIndexBuffer->buffer->id); + glUseProgram(buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->program); })); } @@ -54,12 +63,14 @@ GN_CPP_FUNCTION void openglBindBuffer(gnCommandBufferHandle buffer, gnBufferHand openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([bType, bBuffer, bBufferToBind]{ if (bType == GN_VERTEX_BUFFER) { + bBuffer->commandBuffer->boundVertexBuffer = bBufferToBind; glVertexArrayVertexBuffer( bBuffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->vertexArrayObject, 0, - bBufferToBind->buffer->id, 0, + bBuffer->commandBuffer->boundVertexBuffer->buffer->id, 0, bBuffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->stride ); } else if (bType == GN_INDEX_BUFFER) { + bBuffer->commandBuffer->boundIndexBuffer = bBufferToBind; glVertexArrayElementBuffer(bBuffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->vertexArrayObject, bBufferToBind->buffer->id); } })); @@ -70,7 +81,6 @@ GN_CPP_FUNCTION void openglDraw(gnCommandBuffer buffer, int sVertexCount, int sF glDrawArraysInstancedBaseInstance(GL_TRIANGLES, firstVertex, vertexCount, instanceCount, firstInstance); })); } -// #include "stdio.h" GN_CPP_FUNCTION void openglDrawIndexed(gnCommandBufferHandle sBuffer, gnIndexType sType, int sIndexCount, int sFirstIndex, int sVertexOffset, int sInstanceCount, int sFirstInstance) { gnCommandBuffer buffer = sBuffer; gnIndexType type = sType;