summaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
author0undefined <oscar@nelin.dk>2025-06-13 22:48:46 +0000
committer0undefined <oscar@nelin.dk>2025-06-13 22:48:46 +0000
commit576f79c8ec877b62d55cc79493c0c2d660fde407 (patch)
tree8fe07ef2686da23acd3c45b39d1eac44afa52573 /src/rendering
parentd0d3236687e265e6507a275fae506b17f2c85f6a (diff)
Use image components for GL texture loading
Diffstat (limited to 'src/rendering')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h2
-rw-r--r--src/rendering/src/rendering.c14
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);