From 026fc52d7cb6a27f47df594c1cffca0a7e3c6728 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Sun, 17 Aug 2025 23:15:14 -0400 Subject: [PATCH] uniform API in OpenGL --- .../apis/opengl/loader/opengl_device_loader.c | 7 ++++--- .../src/uniforms/pool/opengl_uniform_pool.c | 5 ++++- .../src/uniforms/uniform/opengl_uniform.c | 14 +++++++++++++ .../src/uniforms/uniform/opengl_uniform.h | 20 +++++++++++++++++++ 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 projects/apis/opengl/src/uniforms/uniform/opengl_uniform.c create mode 100644 projects/apis/opengl/src/uniforms/uniform/opengl_uniform.h diff --git a/projects/apis/opengl/loader/opengl_device_loader.c b/projects/apis/opengl/loader/opengl_device_loader.c index b05b767..9e2b0bd 100644 --- a/projects/apis/opengl/loader/opengl_device_loader.c +++ b/projects/apis/opengl/loader/opengl_device_loader.c @@ -4,6 +4,7 @@ #include "shaders/opengl_shader_module.h" #include "renderpass/opengl_render_pass_descriptor.h" #include "uniforms/pool/opengl_uniform_pool.h" +#include "uniforms/uniform/opengl_uniform.h" #include "commands/pool/opengl_command_pool.h" #include "buffer/opengl_buffer.h" @@ -39,9 +40,9 @@ gnDeviceFunctions loadOpenGLDeviceFunctions() { ._gnUniformPoolAllocateUniforms = openglAllocateUniforms, ._gnDestroyUniformPool = openglDestroyUniformPool, - ._gnUpdateBufferUniform = NULL, - ._gnUpdateStorageUniform = NULL, - ._gnUpdateImageUniform = NULL, + ._gnUpdateBufferUniform = openglUpdateBufferUniform, + ._gnUpdateStorageUniform = openglUpdateStorageUniform, + ._gnUpdateImageUniform = openglUpdateImageUniform, ._gnCreateTexture = NULL, ._gnTextureData = NULL, diff --git a/projects/apis/opengl/src/uniforms/pool/opengl_uniform_pool.c b/projects/apis/opengl/src/uniforms/pool/opengl_uniform_pool.c index 3a28de5..052fed2 100644 --- a/projects/apis/opengl/src/uniforms/pool/opengl_uniform_pool.c +++ b/projects/apis/opengl/src/uniforms/pool/opengl_uniform_pool.c @@ -1,12 +1,15 @@ #include "opengl_uniform_pool.h" +#include "uniforms/uniform/opengl_uniform.h" gnReturnCode openglCreateUniformPool(gnUniformPool pool, gnDeviceHandle device) { return GN_SUCCESS; } gnUniform* openglAllocateUniforms(gnUniformPool pool, const gnUniformAllocationInfo allocInfo) { gnUniform* uniforms = malloc(sizeof(gnUniform) * allocInfo.setCount); - for (int i = 0; i < allocInfo.setCount; i++) + for (int i = 0; i < allocInfo.setCount; i++) { uniforms[i] = malloc(sizeof(struct gnUniform_t)); + uniforms[i]->uniform = malloc(sizeof(struct gnPlatformUniform_t)); + } return uniforms; } void openglDestroyUniformPool(gnUniformPool pool) { diff --git a/projects/apis/opengl/src/uniforms/uniform/opengl_uniform.c b/projects/apis/opengl/src/uniforms/uniform/opengl_uniform.c new file mode 100644 index 0000000..69cc670 --- /dev/null +++ b/projects/apis/opengl/src/uniforms/uniform/opengl_uniform.c @@ -0,0 +1,14 @@ +#include "opengl_uniform.h" + +void openglUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo* info) { + uniform->uniform->type = gl_buffer; + uniform->uniform->buffer_info = *info; +} +void openglUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo* info) { + uniform->uniform->type = gl_storage; + uniform->uniform->storage_info = *info; +} +void openglUpdateImageUniform(gnUniform uniform, gnImageUniformInfo* info) { + uniform->uniform->type = gl_image; + uniform->uniform->image_info = *info; +} diff --git a/projects/apis/opengl/src/uniforms/uniform/opengl_uniform.h b/projects/apis/opengl/src/uniforms/uniform/opengl_uniform.h new file mode 100644 index 0000000..cd61a40 --- /dev/null +++ b/projects/apis/opengl/src/uniforms/uniform/opengl_uniform.h @@ -0,0 +1,20 @@ +#pragma once +#include "glad/glad.h" +#include "core/src/uniforms/gryphn_uniform.h" + +typedef enum openglUniformType { + gl_buffer, gl_storage, gl_image +} openglUniformType; + +typedef struct gnPlatformUniform_t { + openglUniformType type; + union { + gnBufferUniformInfo buffer_info; + gnStorageUniformInfo storage_info; + gnImageUniformInfo image_info; + }; +} gnPlatformUniform; + +void openglUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo* info); +void openglUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo* info); +void openglUpdateImageUniform(gnUniform uniform, gnImageUniformInfo* info);