diff options
| author | Aaditya Dhruv <[email protected]> | 2026-01-25 18:06:13 -0600 |
|---|---|---|
| committer | Aaditya Dhruv <[email protected]> | 2026-01-25 18:06:13 -0600 |
| commit | 955ffb0d4a0235532fdb9b808745bcf571735122 (patch) | |
| tree | 7b6dce22f1af65411ba27cfae88a4e4d9927d862 /src/engine.c | |
| parent | 118980e02e59ff31871df59dce257075394f3533 (diff) | |
rotating cube
Diffstat (limited to 'src/engine.c')
| -rw-r--r-- | src/engine.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/engine.c b/src/engine.c new file mode 100644 index 0000000..9e007ca --- /dev/null +++ b/src/engine.c @@ -0,0 +1,62 @@ +#include "engine.h" +#include "block.h" +#include "window.h" +#include <junk/vector.h> + +int engine_init(struct engine *engine) { + // Setup the Window + struct window* window = malloc(sizeof(struct window)); + memset(window, 0, sizeof(struct window)); + if (window_init(window) != 0) { + free(window); + return -1; + } + engine->window = window; + + // Setup Shader pipeline + struct shader* shader = malloc(sizeof(struct shader)); + memset(shader, 0, sizeof(struct shader)); + if (shader_init(shader)) { + free(window); + free(shader); + return -1; + }; + engine->shader = shader; + + // Setup Objects to draw + struct block* blk = malloc(sizeof(struct block)); + memset(blk, 0, sizeof(struct block)); + vec3 pos = { 0, 0, 0 }; + if (block_init(pos, blk) != 0) { + free(window); + free(shader); + free(blk); + return -1; + } + vector_init(&engine->objects); + VECTOR_INSERT(engine->objects, (void*)blk); + + engine->game_loop = 1; + return 0; +} + +void engine_draw(struct engine* engine) { + while (engine->game_loop) { + SDL_Event event; + while (SDL_PollEvent(&event)) { + // Quit game + if (event.type == SDL_QUIT) { + engine->game_loop = 0; + } + } + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glEnable(GL_DEPTH_TEST); + //glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); + glUseProgram(engine->shader->program); + for (int i = 0; i < engine->objects->len; i++) { + struct block* block = vector_get(engine->objects, i); + block_draw(block, engine->shader); + } + SDL_RenderPresent(engine->window->renderer); + } +} |
