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 cdecaed..62a604c 100644 --- a/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.c +++ b/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.c @@ -26,9 +26,11 @@ void openglResetCommandBuffer(gnCommandBuffer commandBuffer) { // nothing, for now command buffers are implictly reset on begin } gnReturnCode openglBeginCommandBuffer(gnCommandBuffer commandBuffer) { + commandBuffer->commandBuffer->commmandRunner = openglCreateCommandRunner(); return GN_SUCCESS; } gnReturnCode openglEndCommandBuffer(gnCommandBuffer commandBuffer) { + openglDestroyCommandRunner(commandBuffer->commandBuffer->commmandRunner); return GN_SUCCESS; } void openglDestroyCommandBuffer(gnCommandBuffer commandBuffer) { 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 8d1655c..94b9375 100644 --- a/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.h +++ b/projects/apis/opengl/src/commands/buffers/opengl_command_buffer.h @@ -1,8 +1,10 @@ #pragma once #include "core/src/command/command_buffer/gryphn_command_buffer.h" +#include "commands/commands/opengl_command_runner.h" typedef struct gnPlatformCommandBuffer_t { int index; + openglCommandRunner commmandRunner; } gnPlatformCommandBuffer; gnReturnCode openglCommandPoolAllocateCommandBuffers(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPoolHandle pool); diff --git a/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp b/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp new file mode 100644 index 0000000..5774670 --- /dev/null +++ b/projects/apis/opengl/src/commands/commands/opengl_command_runner.cpp @@ -0,0 +1,8 @@ +#include "opengl_command_runner.h" + +typedef struct openglCommandRunner_t { + +} glCommandRunner; + +GN_CPP_FUNCTION openglCommandRunner openglCreateCommandRunner() { return new glCommandRunner(); } +GN_CPP_FUNCTION void openglDestroyCommandRunner(openglCommandRunner runner) { delete runner; } diff --git a/projects/apis/opengl/src/commands/commands/opengl_command_runner.h b/projects/apis/opengl/src/commands/commands/opengl_command_runner.h new file mode 100644 index 0000000..52e264e --- /dev/null +++ b/projects/apis/opengl/src/commands/commands/opengl_command_runner.h @@ -0,0 +1,6 @@ +#pragma once +#include "utils/gryphn_cpp_function.h" +typedef struct openglCommandRunner_t* openglCommandRunner; + +GN_CPP_FUNCTION openglCommandRunner openglCreateCommandRunner(); +GN_CPP_FUNCTION void openglDestroyCommandRunner(openglCommandRunner runner); diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.c b/projects/apis/opengl/src/commands/commands/opengl_commands.c deleted file mode 100644 index 3315d90..0000000 --- a/projects/apis/opengl/src/commands/commands/opengl_commands.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "glad/glad.h" -#include "opengl_commands.h" -#include "framebuffer/opengl_framebuffer.h" - -void openglBeginRenderPass(gnCommandBuffer buffer, gnRenderPassInfo passInfo) { - glBindFramebuffer(GL_FRAMEBUFFER, passInfo.framebuffer->framebuffer->framebuffers[0]); - glClearColor(passInfo.clearValues[0].r, passInfo.clearValues[0].g, passInfo.clearValues[0].b, passInfo.clearValues[0].a); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glEnable(GL_DEPTH_TEST); - glViewport(passInfo.offset.x, passInfo.offset.y, passInfo.size.x, passInfo.size.y); -} -void openglEndRenderPass(gnCommandBuffer buffer) { - glBindFramebuffer(GL_FRAMEBUFFER, 0); -} -void openglBindGraphicsPipeline(gnCommandBuffer buffer, gnGraphicsPipeline graphicsPipeline); -void openglSetViewport(gnCommandBuffer buffer, gnViewport viewport); -void openglSetScissor(gnCommandBuffer buffer, gnScissor scissor); -void openglBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); -void openglDraw(gnCommandBuffer buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); -void openglDrawIndexed(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance); -void openglBindUniform(gnCommandBufferHandle buffer, gnUniform uniform, uint32_t set, uint32_t dynamicOffsetCount, uint32_t* dynamicOffsets); -void openglBindVertexBytes(gnCommandBufferHandle buffer, gnPushConstantLayout layout, void* data); diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.cpp b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp new file mode 100644 index 0000000..367399c --- /dev/null +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.cpp @@ -0,0 +1,22 @@ +#include "glad/glad.h" +#include "opengl_commands.h" +// #include "framebuffer/opengl_framebuffer.h" + +GN_CPP_FUNCTION void openglBeginRenderPass(gnCommandBuffer buffer, gnRenderPassInfo passInfo) { + // glBindFramebuffer(GL_FRAMEBUFFER, passInfo.framebuffer->framebuffer->framebuffers[0]); + // glClearColor(passInfo.clearValues[0].r, passInfo.clearValues[0].g, passInfo.clearValues[0].b, passInfo.clearValues[0].a); + // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + // glEnable(GL_DEPTH_TEST); + // glViewport(passInfo.offset.x, passInfo.offset.y, passInfo.size.x, passInfo.size.y); +} +GN_CPP_FUNCTION void openglEndRenderPass(gnCommandBuffer buffer) { + // glBindFramebuffer(GL_FRAMEBUFFER, 0); +} +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 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); diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.h b/projects/apis/opengl/src/commands/commands/opengl_commands.h index 40c9c27..801f5df 100644 --- a/projects/apis/opengl/src/commands/commands/opengl_commands.h +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.h @@ -1,13 +1,14 @@ #pragma once #include "core/src/command/commands/gryphn_command.h" +#include "utils/gryphn_cpp_function.h" -void openglBeginRenderPass(gnCommandBuffer buffer, gnRenderPassInfo passInfo); -void openglEndRenderPass(gnCommandBuffer buffer); -void openglBindGraphicsPipeline(gnCommandBuffer buffer, gnGraphicsPipeline graphicsPipeline); -void openglSetViewport(gnCommandBuffer buffer, gnViewport viewport); -void openglSetScissor(gnCommandBuffer buffer, gnScissor scissor); -void openglBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); -void openglDraw(gnCommandBuffer buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); -void openglDrawIndexed(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance); -void openglBindUniform(gnCommandBufferHandle buffer, gnUniform uniform, uint32_t set, uint32_t dynamicOffsetCount, uint32_t* dynamicOffsets); -void openglBindVertexBytes(gnCommandBufferHandle buffer, gnPushConstantLayout layout, void* data); +GN_CPP_FUNCTION void openglBeginRenderPass(gnCommandBuffer buffer, gnRenderPassInfo passInfo); +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 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); diff --git a/projects/apis/opengl/src/graphics_pipeline/opengl_graphics_pipeline.c b/projects/apis/opengl/src/graphics_pipeline/opengl_graphics_pipeline.c index 461cfa2..a17e0ff 100644 --- a/projects/apis/opengl/src/graphics_pipeline/opengl_graphics_pipeline.c +++ b/projects/apis/opengl/src/graphics_pipeline/opengl_graphics_pipeline.c @@ -4,9 +4,8 @@ gnReturnCode openglCreateGraphicsPipeline(gnGraphicsPipeline graphicsPipeline, gnOutputDevice device, gnGraphicsPipelineInfo info) { graphicsPipeline->graphicsPipeline = malloc(sizeof(gnPlatformGraphicsPipeline)); graphicsPipeline->graphicsPipeline->program = glCreateProgram(); - for (int i = 0; i < info.shaderModuleCount; i++) { + for (int i = 0; i < info.shaderModuleCount; i++) glAttachShader(graphicsPipeline->graphicsPipeline->program, info.shaderModules[i]->shaderModule->id); - } glLinkProgram(graphicsPipeline->graphicsPipeline->program); return GN_SUCCESS; }