diff options
Diffstat (limited to 'game/src/plugins')
| -rw-r--r-- | game/src/plugins/gltf_view.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/game/src/plugins/gltf_view.c b/game/src/plugins/gltf_view.c index 7c73844..83fc8ed 100644 --- a/game/src/plugins/gltf_view.c +++ b/game/src/plugins/gltf_view.c | |||
| @@ -160,7 +160,9 @@ void update(Game* game, State* state, double t, double dt) { | |||
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | /// Render the bounding boxes of all scene objects. | 162 | /// Render the bounding boxes of all scene objects. |
| 163 | static void render_bounding_boxes(ImmRenderer* imm, const SceneNode* node) { | 163 | static void render_bounding_boxes_rec(ImmRenderer* imm, const SceneNode* node) { |
| 164 | assert(imm); | ||
| 165 | assert(node); | ||
| 164 | if (gfx_get_node_type(node) == ObjectNode) { | 166 | if (gfx_get_node_type(node) == ObjectNode) { |
| 165 | // TODO: Look at the scene log. The JointNodes are detached from the | 167 | // TODO: Look at the scene log. The JointNodes are detached from the |
| 166 | // ObjectNodes. This is why the boxes are not being transformed as expected | 168 | // ObjectNodes. This is why the boxes are not being transformed as expected |
| @@ -175,16 +177,14 @@ static void render_bounding_boxes(ImmRenderer* imm, const SceneNode* node) { | |||
| 175 | // Render children's boxes. | 177 | // Render children's boxes. |
| 176 | for (NodeIter it = gfx_get_node_child(node); it; | 178 | for (NodeIter it = gfx_get_node_child(node); it; |
| 177 | it = gfx_get_next_child(it)) { | 179 | it = gfx_get_next_child(it)) { |
| 178 | render_bounding_boxes(imm, gfx_get_iter_node(it)); | 180 | render_bounding_boxes_rec(imm, gfx_get_iter_node(it)); |
| 179 | } | 181 | } |
| 180 | } | 182 | } |
| 181 | 183 | ||
| 182 | void render(const Game* game, const State* state) { | 184 | /// Render the bounding boxes of all scene objects. |
| 183 | assert(state); | 185 | static void render_bounding_boxes(const Game* game, const State* state) { |
| 184 | assert(game); | 186 | assert(game); |
| 185 | assert(game->gfx); | 187 | assert(state); |
| 186 | assert(state->scene); | ||
| 187 | assert(state->camera); | ||
| 188 | 188 | ||
| 189 | RenderBackend* render_backend = gfx_get_render_backend(game->gfx); | 189 | RenderBackend* render_backend = gfx_get_render_backend(game->gfx); |
| 190 | ImmRenderer* imm = gfx_get_imm_renderer(game->gfx); | 190 | ImmRenderer* imm = gfx_get_imm_renderer(game->gfx); |
| @@ -198,7 +198,7 @@ void render(const Game* game, const State* state) { | |||
| 198 | gfx_imm_start(imm); | 198 | gfx_imm_start(imm); |
| 199 | gfx_imm_set_camera(imm, gfx_get_camera_camera(state->camera)); | 199 | gfx_imm_set_camera(imm, gfx_get_camera_camera(state->camera)); |
| 200 | gfx_imm_set_colour(imm, vec4_make(0.2, 0.2, 1.0, 0.3)); | 200 | gfx_imm_set_colour(imm, vec4_make(0.2, 0.2, 1.0, 0.3)); |
| 201 | render_bounding_boxes(imm, gfx_get_scene_root(state->scene)); | 201 | render_bounding_boxes_rec(imm, gfx_get_scene_root(state->scene)); |
| 202 | gfx_imm_end(imm); | 202 | gfx_imm_end(imm); |
| 203 | 203 | ||
| 204 | gfx_set_polygon_offset(render_backend, 0.0f, 0.0f); | 204 | gfx_set_polygon_offset(render_backend, 0.0f, 0.0f); |
| @@ -206,6 +206,25 @@ void render(const Game* game, const State* state) { | |||
| 206 | gfx_set_blending(render_backend, false); | 206 | gfx_set_blending(render_backend, false); |
| 207 | } | 207 | } |
| 208 | 208 | ||
| 209 | void render(const Game* game, const State* state) { | ||
| 210 | assert(state); | ||
| 211 | assert(game); | ||
| 212 | assert(game->gfx); | ||
| 213 | assert(state->scene); | ||
| 214 | assert(state->camera); | ||
| 215 | |||
| 216 | Renderer* renderer = gfx_get_renderer(game->gfx); | ||
| 217 | assert(renderer); | ||
| 218 | |||
| 219 | gfx_render_scene( | ||
| 220 | renderer, &(RenderSceneParams){ | ||
| 221 | .mode = RenderDefault, | ||
| 222 | .scene = state->scene, | ||
| 223 | .camera = state->camera}); | ||
| 224 | |||
| 225 | render_bounding_boxes(game, state); | ||
| 226 | } | ||
| 227 | |||
| 209 | void resize(Game* game, State* state, int width, int height) { | 228 | void resize(Game* game, State* state, int width, int height) { |
| 210 | assert(game); | 229 | assert(game); |
| 211 | assert(state); | 230 | assert(state); |
