--- a/src/scene.c Sun Nov 16 21:12:20 2025 +0100 +++ b/src/scene.c Sun Nov 16 22:00:13 2025 +0100 @@ -28,6 +28,7 @@ #include "ascension/error.h" #include "ascension/context.h" #include "ascension/scene.h" +#include "ascension/camera.h" #include "ascension/behavior.h" #include "ascension/shader.h" #include "ascension/util.h" @@ -39,9 +40,9 @@ #include <assert.h> -void asc_scene_init_(AscScene *scene, const char *name, struct asc_camera_init_args args) { +void asc_scene_init(AscScene *scene, const char *name, AscCamera *camera) { assert(scene->root == NULL); - asc_camera_init_(&scene->camera, args); + scene->camera = camera; scene->root = asc_scene_node_empty(); for (unsigned i = 0 ; i < ASC_RENDER_GROUP_COUNT ; i++) { scene->internal.render_groups[i] = cxArrayListCreateSimple(CX_STORE_POINTERS, 32); @@ -116,10 +117,13 @@ } void asc_scene_draw(AscScene *scene) { - if (scene->root == NULL) return; + if (!asc_scene_active(scene)) return; // when the viewport is zero, exit immediately - if (scene->camera.viewport.size.width == 0 || scene->camera.viewport.size.height == 0) { + const AscCamera *camera = asc_scene_camera(scene); + if (camera == NULL || + camera->viewport.size.width == 0 || + camera->viewport.size.height == 0) { return; } @@ -181,20 +185,20 @@ // set the viewport glViewport( - scene->camera.viewport.pos.x, - scene->camera.viewport.pos.y, - scene->camera.viewport.size.width, - scene->camera.viewport.size.height + camera->viewport.pos.x, + camera->viewport.pos.y, + camera->viewport.size.width, + camera->viewport.size.height ); - if (scene->camera.viewport_clear) { + if (camera->viewport_clear) { glScissor( - scene->camera.viewport.pos.x, - scene->camera.viewport.pos.y, - scene->camera.viewport.size.width, - scene->camera.viewport.size.height + camera->viewport.pos.x, + camera->viewport.pos.y, + camera->viewport.size.width, + camera->viewport.size.height ); glEnable(GL_SCISSOR_TEST); - const asc_color col = scene->camera.clear_color; + const asc_color col = camera->clear_color; glClearColor(col.red, col.green, col.blue, col.alpha); glClear(GL_COLOR_BUFFER_BIT); glDisable(GL_SCISSOR_TEST);