From 5db32f367a4afce2460b6be86f6b4b0629a433b0 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Mon, 18 Aug 2025 20:24:17 -0400 Subject: [PATCH] OpenGL texture API --- .../apis/opengl/loader/opengl_device_loader.c | 7 ++-- .../apis/opengl/src/textures/opengl_texture.c | 34 +++++++++++++++++++ .../apis/opengl/src/textures/opengl_texture.h | 4 +++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 projects/apis/opengl/src/textures/opengl_texture.c diff --git a/projects/apis/opengl/loader/opengl_device_loader.c b/projects/apis/opengl/loader/opengl_device_loader.c index 9e2b0bd..d3edbce 100644 --- a/projects/apis/opengl/loader/opengl_device_loader.c +++ b/projects/apis/opengl/loader/opengl_device_loader.c @@ -7,6 +7,7 @@ #include "uniforms/uniform/opengl_uniform.h" #include "commands/pool/opengl_command_pool.h" #include "buffer/opengl_buffer.h" +#include "textures/opengl_texture.h" gnDeviceFunctions loadOpenGLDeviceFunctions() { return (gnDeviceFunctions){ @@ -44,9 +45,9 @@ gnDeviceFunctions loadOpenGLDeviceFunctions() { ._gnUpdateStorageUniform = openglUpdateStorageUniform, ._gnUpdateImageUniform = openglUpdateImageUniform, - ._gnCreateTexture = NULL, - ._gnTextureData = NULL, - ._gnDestroyTexture = NULL, + ._gnCreateTexture = openglCreateTexture, + ._gnTextureData = openglTextureData, + ._gnDestroyTexture = openglDestroyTexture, ._gnSubmit = NULL, ._gnPresent = NULL, diff --git a/projects/apis/opengl/src/textures/opengl_texture.c b/projects/apis/opengl/src/textures/opengl_texture.c new file mode 100644 index 0000000..8663472 --- /dev/null +++ b/projects/apis/opengl/src/textures/opengl_texture.c @@ -0,0 +1,34 @@ +#include "opengl_texture.h" +#include "surface/opengl_surface.h" + +GLenum GryphnTargetToOpenGL(gnTextureType type) { + switch(type) { + case GN_TEXTURE_2D: return GL_TEXTURE_2D; + } +} + +gnReturnCode openglCreateTexture(gnTexture texture, gnDevice device, const gnTextureInfo info) { + texture->texture = malloc(sizeof(gnPlatformTexture)); + glCreateTextures(GryphnTargetToOpenGL(info.type), 1, &texture->texture->id); + glTextureStorage2D( + texture->texture->id, + 1, + glGryphnFormatToOpenGLInternalFormat(info.format), + info.extent.x, info.extent.y + ); + return GN_SUCCESS; +} +void openglTextureData(gnTextureHandle texture, void* pixelData) { + glTextureSubImage2D( + texture->texture->id, + 0, + 0, 0, + texture->info.extent.x, texture->info.extent.y, + GL_RGBA, + GL_UNSIGNED_BYTE, + pixelData + ); +} +void openglDestroyTexture(gnTexture texture) { + +} diff --git a/projects/apis/opengl/src/textures/opengl_texture.h b/projects/apis/opengl/src/textures/opengl_texture.h index 8cc3256..c861338 100644 --- a/projects/apis/opengl/src/textures/opengl_texture.h +++ b/projects/apis/opengl/src/textures/opengl_texture.h @@ -5,3 +5,7 @@ typedef struct gnPlatformTexture_t { GLuint id; } gnPlatformTexture; + +gnReturnCode openglCreateTexture(gnTexture texture, gnDevice device, const gnTextureInfo info); +void openglTextureData(gnTextureHandle texture, void* pixelData); +void openglDestroyTexture(gnTexture texture);