summaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2024-02-19 07:14:06 +0000
committer0scar <qgt268@alumni.ku.dk>2024-02-19 07:18:45 +0000
commitb0bfd3cf610fdf243503447f6ad9fa19de502365 (patch)
treea519569bb12219f685c32427972da67ee345ff82 /src/rendering
parentbfe5cc29b1f31fe4921264a96a58607c836ee516 (diff)
Add texture loading
Diffstat (limited to 'src/rendering')
-rw-r--r--src/rendering/include/engine/rendering/rendering.h11
-rw-r--r--src/rendering/src/rendering.c25
2 files changed, 36 insertions, 0 deletions
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;
@@ -28,6 +29,14 @@ typedef struct {
} 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;
} Sprite;
@@ -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;
+}