From 4477c41dc4bdd7d231955d379354d29753631561 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Mon, 18 Aug 2025 21:22:22 -0400 Subject: [PATCH] render pass in OpenGL --- .../opengl/loader/opengl_commands_loader.c | 5 +++-- .../src/commands/commands/opengl_commands.c | 22 +++++++++++++++++++ .../src/commands/commands/opengl_commands.h | 13 +++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 projects/apis/opengl/src/commands/commands/opengl_commands.c create mode 100644 projects/apis/opengl/src/commands/commands/opengl_commands.h diff --git a/projects/apis/opengl/loader/opengl_commands_loader.c b/projects/apis/opengl/loader/opengl_commands_loader.c index 2751685..4d486fe 100644 --- a/projects/apis/opengl/loader/opengl_commands_loader.c +++ b/projects/apis/opengl/loader/opengl_commands_loader.c @@ -1,5 +1,6 @@ #include "opengl_loader.h" #include "commands/buffers/opengl_command_buffer.h" +#include "commands/commands/opengl_commands.h" gnCommandFunctions loadOpenGLCommandFunctions() { return (gnCommandFunctions) { @@ -10,8 +11,8 @@ gnCommandFunctions loadOpenGLCommandFunctions() { ._gnEndCommandBuffer = openglEndCommandBuffer, ._gnDestroyCommandBuffer = openglDestroyCommandBuffer, - ._gnCommandBeginRenderPass = NULL, - ._gnCommandEndRenderPass = NULL, + ._gnCommandBeginRenderPass = openglBeginRenderPass, + ._gnCommandEndRenderPass = openglEndRenderPass, ._gnCommandBindGraphicsPipeline = NULL, ._gnCommandSetViewport = NULL, diff --git a/projects/apis/opengl/src/commands/commands/opengl_commands.c b/projects/apis/opengl/src/commands/commands/opengl_commands.c new file mode 100644 index 0000000..3315d90 --- /dev/null +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.c @@ -0,0 +1,22 @@ +#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.h b/projects/apis/opengl/src/commands/commands/opengl_commands.h new file mode 100644 index 0000000..40c9c27 --- /dev/null +++ b/projects/apis/opengl/src/commands/commands/opengl_commands.h @@ -0,0 +1,13 @@ +#pragma once +#include "core/src/command/commands/gryphn_command.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);