diff --git a/projects/apis/opengl/loader/opengl_commands_loader.c b/projects/apis/opengl/loader/opengl_commands_loader.c index 4d486fe..88b6d31 100644 --- a/projects/apis/opengl/loader/opengl_commands_loader.c +++ b/projects/apis/opengl/loader/opengl_commands_loader.c @@ -20,8 +20,8 @@ gnCommandFunctions loadOpenGLCommandFunctions() { ._gnCommandBindUniform = NULL, ._gnCommandPushConstant = NULL, - ._gnCommandBindBuffer = NULL, - ._gnCommandDraw = NULL, - ._gnCommandDrawIndexed = NULL, + ._gnCommandBindBuffer = openglBindBuffer, + ._gnCommandDraw = openglDraw, + ._gnCommandDrawIndexed = openglDrawIndexed, }; } diff --git a/projects/apis/opengl/src/buffer/opengl_buffer.h b/projects/apis/opengl/src/buffer/opengl_buffer.h index 878864f..12b5ff5 100644 --- a/projects/apis/opengl/src/buffer/opengl_buffer.h +++ b/projects/apis/opengl/src/buffer/opengl_buffer.h @@ -1,6 +1,7 @@ #pragma once #include "core/src/buffers/gryphn_buffer.h" #include "glad/glad.h" +#include "utils/gryphn_cpp_function.h" typedef struct gnPlatformBuffer_t { GLuint id; @@ -13,3 +14,6 @@ void openglBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, void* openglMapBuffer(gnBufferHandle buffer); void openglUnmapBuffer(gnBufferHandle buffer); void openglDestroyBuffer(gnBufferHandle buffer); + + +GN_CPP_FUNCTION GLenum gnBufferTypeToGLEnum(gnBufferType type); diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp index a5662fe..6231a00 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp @@ -27,8 +27,20 @@ GN_CPP_FUNCTION void openglEndRenderPass(gnCommandBuffer buffer) { GN_CPP_FUNCTION void openglBindGraphicsPipeline(gnCommandBuffer buffer, gnGraphicsPipeline graphicsPipeline); GN_CPP_FUNCTION void openglSetViewport(gnCommandBuffer buffer, gnViewport viewport); GN_CPP_FUNCTION void openglSetScissor(gnCommandBuffer buffer, gnScissor scissor); -GN_CPP_FUNCTION void openglBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); -GN_CPP_FUNCTION void openglDraw(gnCommandBuffer buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); -GN_CPP_FUNCTION void openglDrawIndexed(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance); +GN_CPP_FUNCTION void openglBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) { + openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([&]{ + glBindBuffer(gnBufferTypeToGLEnum(type), bufferToBind->buffer->id); + })); +} +GN_CPP_FUNCTION void openglDraw(gnCommandBuffer buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { + openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([&]{ + glDrawArraysInstancedBaseInstance(GL_TRIANGLES, firstVertex, vertexCount, instanceCount, firstInstance); + })); +} +GN_CPP_FUNCTION void openglDrawIndexed(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance) { + openglCommandRunnerBindFunction(buffer->commandBuffer->commmandRunner, std::function([&]{ + glDrawElementsInstancedBaseVertexBaseInstance(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, (void*)(sizeof(GLuint) * firstIndex), instanceCount, vertexOffset, firstInstance); + })); +} GN_CPP_FUNCTION void openglBindUniform(gnCommandBufferHandle buffer, gnUniform uniform, uint32_t set, uint32_t dynamicOffsetCount, uint32_t* dynamicOffsets); GN_CPP_FUNCTION void openglBindVertexBytes(gnCommandBufferHandle buffer, gnPushConstantLayout layout, void* data);