diff options
author | 3gg <3gg@shellblade.net> | 2023-06-21 08:53:09 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2023-06-21 08:53:09 -0700 |
commit | 616c2a5903c9da722f4c06607da2705e7bc6a282 (patch) | |
tree | 58af72bcc1593caba675bf9f93b66339fbdf698c | |
parent | a85b62fdb2e153195a52cef8ecad27432bf37f50 (diff) |
Make camera optional in the renderer and move start/end frame calls outside so that it can be used along the imm renderer.
-rw-r--r-- | gfx/src/renderer/renderer.c | 26 | ||||
-rw-r--r-- | gltfview/src/game.c | 7 |
2 files changed, 22 insertions, 11 deletions
diff --git a/gfx/src/renderer/renderer.c b/gfx/src/renderer/renderer.c index bddde90..ac6a45f 100644 --- a/gfx/src/renderer/renderer.c +++ b/gfx/src/renderer/renderer.c | |||
@@ -264,7 +264,10 @@ static void draw_recursively( | |||
264 | gfx_set_mat4_uniform(shader, "CameraRotation", state->camera_rotation); | 264 | gfx_set_mat4_uniform(shader, "CameraRotation", state->camera_rotation); |
265 | gfx_set_float_uniform(shader, "Fovy", state->fovy); | 265 | gfx_set_float_uniform(shader, "Fovy", state->fovy); |
266 | gfx_set_float_uniform(shader, "Aspect", state->aspect); | 266 | gfx_set_float_uniform(shader, "Aspect", state->aspect); |
267 | gfx_set_vec3_uniform(shader, "CameraPosition", state->camera->spatial.p); | 267 | if (state->camera) { |
268 | gfx_set_vec3_uniform( | ||
269 | shader, "CameraPosition", state->camera->spatial.p); | ||
270 | } | ||
268 | if (state->num_joints > 0) { | 271 | if (state->num_joints > 0) { |
269 | gfx_set_mat4_array_uniform( | 272 | gfx_set_mat4_array_uniform( |
270 | shader, "JointMatrices", state->joint_matrices, state->num_joints); | 273 | shader, "JointMatrices", state->joint_matrices, state->num_joints); |
@@ -309,7 +312,6 @@ void gfx_render_scene(Renderer* renderer, const RenderSceneParams* params) { | |||
309 | assert(renderer); | 312 | assert(renderer); |
310 | assert(params); | 313 | assert(params); |
311 | assert(params->scene); | 314 | assert(params->scene); |
312 | assert(params->camera); | ||
313 | 315 | ||
314 | ShaderProgram* const shader = load_shader(renderer, params->mode); | 316 | ShaderProgram* const shader = load_shader(renderer, params->mode); |
315 | 317 | ||
@@ -318,11 +320,17 @@ void gfx_render_scene(Renderer* renderer, const RenderSceneParams* params) { | |||
318 | 320 | ||
319 | RenderBackend* render_backend = renderer->render_backend; | 321 | RenderBackend* render_backend = renderer->render_backend; |
320 | 322 | ||
321 | const mat4 projection = camera ? camera->camera.projection : mat4_id(); | 323 | mat4 projection, camera_rotation, view_matrix; |
322 | const mat4 camera_rotation = | 324 | if (camera) { |
323 | mat4_rotation(spatial3_transform(&camera->camera.spatial)); | 325 | projection = camera->camera.projection; |
324 | const mat4 view_matrix = | 326 | camera_rotation = |
325 | camera ? spatial3_inverse_transform(&camera->camera.spatial) : mat4_id(); | 327 | mat4_rotation(spatial3_transform(&camera->camera.spatial)); |
328 | view_matrix = spatial3_inverse_transform(&camera->camera.spatial); | ||
329 | } else { | ||
330 | projection = mat4_id(); | ||
331 | camera_rotation = mat4_id(); | ||
332 | view_matrix = mat4_id(); | ||
333 | } | ||
326 | 334 | ||
327 | int width, height; | 335 | int width, height; |
328 | gfx_get_viewport(render_backend, &width, &height); | 336 | gfx_get_viewport(render_backend, &width, &height); |
@@ -341,8 +349,6 @@ void gfx_render_scene(Renderer* renderer, const RenderSceneParams* params) { | |||
341 | // Assuming a perspective matrix. | 349 | // Assuming a perspective matrix. |
342 | .fovy = atan(1.0 / (mat4_at(projection, 1, 1))) * 2, | 350 | .fovy = atan(1.0 / (mat4_at(projection, 1, 1))) * 2, |
343 | .aspect = aspect}; | 351 | .aspect = aspect}; |
344 | 352 | ||
345 | gfx_start_frame(render_backend); | ||
346 | draw_recursively(&state, mat4_id(), scene->root); | 353 | draw_recursively(&state, mat4_id(), scene->root); |
347 | gfx_end_frame(render_backend); | ||
348 | } | 354 | } |
diff --git a/gltfview/src/game.c b/gltfview/src/game.c index d618447..5ca9ad4 100644 --- a/gltfview/src/game.c +++ b/gltfview/src/game.c | |||
@@ -130,7 +130,10 @@ void game_update(Game* game, double t, double dt) { | |||
130 | } | 130 | } |
131 | 131 | ||
132 | void game_render(const Game* game) { | 132 | void game_render(const Game* game) { |
133 | Renderer* renderer = gfx_get_renderer(game->gfx); | 133 | RenderBackend* render_backend = gfx_get_render_backend(game->gfx); |
134 | Renderer* renderer = gfx_get_renderer(game->gfx); | ||
135 | |||
136 | gfx_start_frame(render_backend); | ||
134 | 137 | ||
135 | gfx_render_scene( | 138 | gfx_render_scene( |
136 | renderer, | 139 | renderer, |
@@ -142,6 +145,8 @@ void game_render(const Game* game) { | |||
142 | void* plugin_state = get_plugin_state(game->plugin); | 145 | void* plugin_state = get_plugin_state(game->plugin); |
143 | plugin_call(game->plugin, plugin_render, "render", plugin_state, game); | 146 | plugin_call(game->plugin, plugin_render, "render", plugin_state, game); |
144 | } | 147 | } |
148 | |||
149 | gfx_end_frame(render_backend); | ||
145 | } | 150 | } |
146 | 151 | ||
147 | void game_set_viewport(Game* game, int width, int height) { | 152 | void game_set_viewport(Game* game, int width, int height) { |