diff options
| author | 0undefined <oscar@nelin.dk> | 2025-06-13 22:48:46 +0000 |
|---|---|---|
| committer | 0undefined <oscar@nelin.dk> | 2025-06-13 22:48:46 +0000 |
| commit | 576f79c8ec877b62d55cc79493c0c2d660fde407 (patch) | |
| tree | 8fe07ef2686da23acd3c45b39d1eac44afa52573 /src/rendering | |
| parent | d0d3236687e265e6507a275fae506b17f2c85f6a (diff) | |
Use image components for GL texture loading
Diffstat (limited to 'src/rendering')
| -rw-r--r-- | src/rendering/include/engine/rendering/rendering.h | 2 | ||||
| -rw-r--r-- | src/rendering/src/rendering.c | 14 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h index 5badec7..a996257 100644 --- a/src/rendering/include/engine/rendering/rendering.h +++ b/src/rendering/include/engine/rendering/rendering.h @@ -280,7 +280,7 @@ 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); +Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 height, u8 components); #ifdef __cplusplus } diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index b96e85a..4296a7a 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -659,7 +659,7 @@ Sprite sprite_new(u64 tid, u8 coord) { }}; } -Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 height) { +Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 height, u8 components) { Window* restrict w = GLOBAL_PLATFORM->window; Texture t; t.width = width; @@ -674,8 +674,18 @@ Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 hei gl->GenTextures(1, &t.id); gl->BindTexture(GL_TEXTURE_2D, t.id); + u32 err = gl->GetError(); + if (err) { + ERROR("Failed to bind texture from image data!"); + } + + /* TODO: Support more formats than rgb and rgba, such as gray, gray/alpha, etc.*/ + u32 format = GL_RGB; + if (components == 4) format = GL_RGBA; + + /* TODO: Don't force internal format to RGB */ - gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, + gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, format, GL_UNSIGNED_BYTE, image_data); gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
