diff options
| author | 0scar <qgt268@alumni.ku.dk> | 2024-02-05 16:36:47 +0000 |
|---|---|---|
| committer | 0scar <qgt268@alumni.ku.dk> | 2024-02-05 16:48:20 +0000 |
| commit | e85f81ec109782a01f1f741d4c2ed5f21af0c124 (patch) | |
| tree | 8708c742b296de20e2d54ef9fa8ea7c2036d3d82 /src/rendering | |
| parent | 457a4a3b1f00bf4d6c31b693085aa7150d2dcded (diff) | |
Organize the sourcefiles
Diffstat (limited to 'src/rendering')
| -rw-r--r-- | src/rendering/gl.c | 0 | ||||
| -rw-r--r-- | src/rendering/rendering.c | 137 | ||||
| -rw-r--r-- | src/rendering/text.c | 0 | ||||
| -rw-r--r-- | src/rendering/window.c | 0 |
4 files changed, 137 insertions, 0 deletions
diff --git a/src/rendering/gl.c b/src/rendering/gl.c new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/rendering/gl.c diff --git a/src/rendering/rendering.c b/src/rendering/rendering.c new file mode 100644 index 0000000..dff3432 --- /dev/null +++ b/src/rendering/rendering.c @@ -0,0 +1,137 @@ +#include <stdio.h> +#include <string.h> + +//#define GLAD_GL_IMPLEMENTATION +#include <glad/gl.h> +//#define GLFW_INCLUDE_NONE +#include <GLFW/glfw3.h> + + +#define ENGINE_INTERNALS +#include <engine/engine.h> +#include <engine/rendering.h> + +/* Extern globals */ +extern Platform* GLOBAL_PLATFORM; + +/* Globals */ +#define drawcall_limit (64 * 1024) +RenderDrawCall drawcalls[drawcall_limit]; +i32 drawcall_len = 0; + +//struct RenderObject; + +/* Implementations */ + +/* Clear the screen, + * To be used inbetween draw calls */ +void render_begin(Window* w) { + //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glfwMakeContextCurrent(w->window); + w->context->Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +void render_present(Window* w) { +// for (i32 i = 0; i < drawcall_len; i++) { +// RenderDrawCall dc = drawcalls[i]; +// switch (dc.type) { +// case RenderDrawCallType_UITree: +// render_uitree(w, dc.data.data); +// break; +// case RenderDrawCallType_Text: +// LOG("RenderDrawCallType_Text rendering not implemented!"); +// break; +// case RenderDrawCallType_Sprite: { +//#ifdef _DEBUG +// if (dc.data.sprite.sprite == NULL) { +// __asm__("int3;"); +// WARN("Sprite %lx in drawcall %d/%d had NULL reference", +// dc.data.sprite.sprite, i, drawcall_len); +// +// drawcall_len = 0; +// exit(EXIT_FAILURE); +// } +//#endif +// Sprite s = *dc.data.sprite.sprite; +// Texture* t = +// ((struct Resources*)GLOBAL_PLATFORM->data)->textures[s.texture_id]; +// i32 ts = t->tilesize; +// } break; +// default: +// break; +// } +// } + + drawcall_len = 0; + + glfwSwapBuffers(w->window); +} + +void drawcall_reset(void) { drawcall_len = 0; } + +void window_size_callback(GLFWwindow* window, int width, int height) { + GLOBAL_PLATFORM->window->context->Viewport(0,0, width, height); + //*GLOBAL_PLATFORM->window->game_w = width; + //*GLOBAL_PLATFORM->window->game_h = height; + GLOBAL_PLATFORM->window->windowsize.x = width; + GLOBAL_PLATFORM->window->windowsize.y = height; +} + +void engine_window_resize_pointers(i32* w, i32* h) { + GLOBAL_PLATFORM->window->game_w = w; + GLOBAL_PLATFORM->window->game_h = h; +} + +void engine_window_resize_pointers_reset(void) { + GLOBAL_PLATFORM->window->game_w = NULL; + GLOBAL_PLATFORM->window->game_h = NULL; +} + +void engine_draw_uitree(UITree* t) { + if (drawcall_len + 1 >= drawcall_limit) return; + drawcalls[drawcall_len++] = (RenderDrawCall){ + .type = RenderDrawCallType_UITree, .data.data = (void*)t}; +} + +void engine_draw_sprite(Sprite* s, v2_i32* pos, f32 scale) { + if (drawcall_len + 1 >= drawcall_limit) return; +#ifdef _DEBUG + if (s == NULL) __asm__("int3;"); +#endif + drawcalls[drawcall_len++] = + (RenderDrawCall){.type = RenderDrawCallType_Sprite, + .data.sprite = { + .sprite = s, + .x = pos->x, + .y = pos->y, + .scale = scale, + //.mod = {0xFF, 0xFF, 0xFF, 0xFF}, + }}; +} + +void engine_draw_sprite_ex(Sprite* s, v2_i32* pos, f32 scale, + Engine_color colormod) { + if (drawcall_len + 1 >= drawcall_limit) return; +#ifdef _DEBUG + if (s == NULL) __asm__("int3;"); +#endif + drawcalls[drawcall_len++] = (RenderDrawCall){ + .type = RenderDrawCallType_Sprite, + .data.sprite = { + .sprite = s, + .x = pos->x, + .y = pos->y, + .scale = scale, + //.mod = {colormod.r, colormod.g, colormod.b, colormod.a}, + }}; +} + +Sprite sprite_new(u64 tid, u8 coord) { + const i32 ts = + ((struct Resources*)GLOBAL_PLATFORM->data)->textures[tid]->tilesize; + return (Sprite){.texture_id = tid, + (v2_i32){ + .x = ts * (coord & 0x0F), + .y = ts * ((coord & 0xF0) >> 4), + }}; +} diff --git a/src/rendering/text.c b/src/rendering/text.c new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/rendering/text.c diff --git a/src/rendering/window.c b/src/rendering/window.c new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/rendering/window.c |
