diff options
| -rw-r--r-- | include/gfx/scene/scene.h | 3 | ||||
| -rw-r--r-- | include/gfx/util/skyquad.h | 1 | ||||
| -rw-r--r-- | src/render/renderer.c | 4 | ||||
| -rw-r--r-- | src/scene/scene.c | 14 | ||||
| -rw-r--r-- | src/scene/scene_impl.h | 6 |
5 files changed, 15 insertions, 13 deletions
diff --git a/include/gfx/scene/scene.h b/include/gfx/scene/scene.h index ac1b315..7386349 100644 --- a/include/gfx/scene/scene.h +++ b/include/gfx/scene/scene.h | |||
| @@ -15,4 +15,5 @@ Scene* gfx_make_scene(void); | |||
| 15 | void gfx_destroy_scene(Scene**); | 15 | void gfx_destroy_scene(Scene**); |
| 16 | 16 | ||
| 17 | /// Get the scene's root node. | 17 | /// Get the scene's root node. |
| 18 | SceneNode* gfx_get_scene_root(Scene*); | 18 | const SceneNode* gfx_get_scene_root(const Scene*); |
| 19 | SceneNode* gfx_get_scene_root_mut(Scene*); | ||
diff --git a/include/gfx/util/skyquad.h b/include/gfx/util/skyquad.h index 2b3fe17..55319e1 100644 --- a/include/gfx/util/skyquad.h +++ b/include/gfx/util/skyquad.h | |||
| @@ -2,7 +2,6 @@ | |||
| 2 | #pragma once | 2 | #pragma once |
| 3 | 3 | ||
| 4 | typedef struct GfxCore GfxCore; | 4 | typedef struct GfxCore GfxCore; |
| 5 | typedef struct Scene Scene; | ||
| 6 | typedef struct SceneNode SceneNode; | 5 | typedef struct SceneNode SceneNode; |
| 7 | typedef struct SceneObject SceneObject; | 6 | typedef struct SceneObject SceneObject; |
| 8 | typedef struct Texture Texture; | 7 | typedef struct Texture Texture; |
diff --git a/src/render/renderer.c b/src/render/renderer.c index fadf521..b513ed4 100644 --- a/src/render/renderer.c +++ b/src/render/renderer.c | |||
| @@ -208,7 +208,7 @@ void gfx_render_scene(Renderer* renderer, const RenderSceneParams* params) { | |||
| 208 | 208 | ||
| 209 | gfx_llr_set_camera(renderer->llr, camera); | 209 | gfx_llr_set_camera(renderer->llr, camera); |
| 210 | gfx_llr_set_aspect(renderer->llr, aspect); | 210 | gfx_llr_set_aspect(renderer->llr, aspect); |
| 211 | draw_recursively(&state, mat4_id(), scene->root); | 211 | draw_recursively(&state, mat4_id(), gfx_get_scene_root(scene)); |
| 212 | } | 212 | } |
| 213 | 213 | ||
| 214 | static void update_rec(SceneNode* node, const Camera* camera, R t) { | 214 | static void update_rec(SceneNode* node, const Camera* camera, R t) { |
| @@ -240,6 +240,6 @@ void gfx_update(Scene* scene, const Camera* camera, R t) { | |||
| 240 | assert(scene); | 240 | assert(scene); |
| 241 | assert(camera); | 241 | assert(camera); |
| 242 | 242 | ||
| 243 | SceneNode* node = gfx_get_scene_root(scene); | 243 | SceneNode* node = gfx_get_scene_root_mut(scene); |
| 244 | update_rec(node, camera, t); | 244 | update_rec(node, camera, t); |
| 245 | } | 245 | } |
diff --git a/src/scene/scene.c b/src/scene/scene.c index 8c53810..52ddb58 100644 --- a/src/scene/scene.c +++ b/src/scene/scene.c | |||
| @@ -7,19 +7,25 @@ | |||
| 7 | 7 | ||
| 8 | Scene* gfx_make_scene(void) { | 8 | Scene* gfx_make_scene(void) { |
| 9 | Scene* scene = mem_alloc_scene(); | 9 | Scene* scene = mem_alloc_scene(); |
| 10 | scene->root = gfx_make_node(); | 10 | scene->root = mem_get_node_index(gfx_make_node()); |
| 11 | return scene; | 11 | return scene; |
| 12 | } | 12 | } |
| 13 | 13 | ||
| 14 | void gfx_destroy_scene(Scene** scene) { | 14 | void gfx_destroy_scene(Scene** scene) { |
| 15 | assert(scene); | 15 | assert(scene); |
| 16 | if (*scene) { | 16 | if (*scene) { |
| 17 | gfx_destroy_node(&(*scene)->root); | 17 | SceneNode* node = mem_get_node((*scene)->root); |
| 18 | gfx_destroy_node(&node); | ||
| 18 | mem_free_scene(scene); | 19 | mem_free_scene(scene); |
| 19 | } | 20 | } |
| 20 | } | 21 | } |
| 21 | 22 | ||
| 22 | SceneNode* gfx_get_scene_root(Scene* scene) { | 23 | const SceneNode* gfx_get_scene_root(const Scene* scene) { |
| 23 | assert(scene); | 24 | assert(scene); |
| 24 | return scene->root; | 25 | return mem_get_node(scene->root); |
| 26 | } | ||
| 27 | |||
| 28 | SceneNode* gfx_get_scene_root_mut(Scene* scene) { | ||
| 29 | assert(scene); | ||
| 30 | return (SceneNode*)gfx_get_scene_root(scene); | ||
| 25 | } | 31 | } |
diff --git a/src/scene/scene_impl.h b/src/scene/scene_impl.h index 06a69f0..157f891 100644 --- a/src/scene/scene_impl.h +++ b/src/scene/scene_impl.h | |||
| @@ -4,10 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | #include "../types.h" | 5 | #include "../types.h" |
| 6 | 6 | ||
| 7 | typedef struct SceneNode SceneNode; | ||
| 8 | |||
| 9 | typedef struct Scene { | 7 | typedef struct Scene { |
| 10 | SceneNode* root; | 8 | node_idx root; |
| 11 | scene_idx next; | ||
| 12 | scene_idx prev; | ||
| 13 | } Scene; | 9 | } Scene; |
