From b0bfd3cf610fdf243503447f6ad9fa19de502365 Mon Sep 17 00:00:00 2001 From: 0scar Date: Mon, 19 Feb 2024 08:14:06 +0100 Subject: Add texture loading --- src/rendering/include/engine/rendering/rendering.h | 11 ++++++++++ src/rendering/src/rendering.c | 25 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) (limited to 'src/rendering') diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h index 87de0b2..1412cb4 100644 --- a/src/rendering/include/engine/rendering/rendering.h +++ b/src/rendering/include/engine/rendering/rendering.h @@ -20,6 +20,7 @@ extern "C" { #define RGB(_r, _g, _b) RGBA(_r, _g, _b, 0xFF) /* Types */ +/* TODO: Cleanup these types. */ typedef struct { u8 r; u8 g; @@ -27,6 +28,14 @@ typedef struct { u8 a; } Engine_color; +typedef struct { + /* Maybe implement types, such as `atlas` (default), `standalone`, or + * something idk. */ + u32 id; + i32 width; + i32 height; +} Texture; + typedef struct { u32 texture_id; v2_i32 coord; @@ -145,6 +154,8 @@ u32 ComposeShader(u32 *shaders, usize shaders_len); ShaderType guess_shadertype_from_filename(const char *restrict fname); +Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 height); + #ifdef __cplusplus } #endif diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index aa9306e..d475ee2 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -252,3 +252,28 @@ Sprite sprite_new(u64 tid, u8 coord) { .y = ts * ((coord & 0xF0) >> 4), }}; } + +Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 height) { + Window* restrict w = GLOBAL_PLATFORM->window; + Texture t; + t.width = width; + t.height = height; + + if (w->renderer != WINDOW_RENDERER_OPENGL) { + ERROR("createTextureFromImageData not implemented for chosen renderer!"); + return (Texture){.id = 0, .width = 0, .height = 0}; + } + + const GladGLContext* gl = w->context; + + gl->GenTextures(1, &t.id); + gl->BindTexture(GL_TEXTURE_2D, t.id); + + gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, + GL_UNSIGNED_BYTE, image_data); + + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + return t; +} -- cgit v1.3