aboutsummaryrefslogtreecommitdiff
path: root/src/llr/llr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/llr/llr.c')
-rw-r--r--src/llr/llr.c42
1 files changed, 25 insertions, 17 deletions
diff --git a/src/llr/llr.c b/src/llr/llr.c
index 746f4b3..74cfaed 100644
--- a/src/llr/llr.c
+++ b/src/llr/llr.c
@@ -171,6 +171,9 @@ static void configure_state(LLR* renderer) {
171 gfx_set_mat4_uniform(shader, "ViewProjection", &view_proj); 171 gfx_set_mat4_uniform(shader, "ViewProjection", &view_proj);
172 gfx_set_mat4_uniform(shader, "MVP", &mvp); 172 gfx_set_mat4_uniform(shader, "MVP", &mvp);
173 gfx_set_vec3_uniform(shader, "CameraPosition", renderer->camera_position); 173 gfx_set_vec3_uniform(shader, "CameraPosition", renderer->camera_position);
174 gfx_set_mat4_uniform(shader, "CameraRotation", &renderer->camera_rotation);
175 gfx_set_float_uniform(shader, "Fovy", renderer->fovy);
176 gfx_set_float_uniform(shader, "Aspect", renderer->aspect);
174 } 177 }
175 178
176 if (renderer->lights_changed || renderer->shader_changed) { 179 if (renderer->lights_changed || renderer->shader_changed) {
@@ -188,9 +191,11 @@ static void configure_state(LLR* renderer) {
188 if (renderer->skeleton_changed || renderer->shader_changed) { 191 if (renderer->skeleton_changed || renderer->shader_changed) {
189 renderer->skeleton_changed = false; 192 renderer->skeleton_changed = false;
190 193
191 gfx_set_mat4_array_uniform( 194 if (renderer->num_joints > 0) {
192 shader, "JointMatrices", renderer->joint_matrices, 195 gfx_set_mat4_array_uniform(
193 renderer->num_joints); 196 shader, "JointMatrices", renderer->joint_matrices,
197 renderer->num_joints);
198 }
194 } 199 }
195 200
196 if (renderer->shader_changed) { 201 if (renderer->shader_changed) {
@@ -211,6 +216,9 @@ bool gfx_llr_make(LLR* renderer, GfxCore* gfxcore) {
211 goto cleanup; 216 goto cleanup;
212 } 217 }
213 gfx_llr_load_identity(renderer); 218 gfx_llr_load_identity(renderer);
219 renderer->view = mat4_id();
220 renderer->projection = mat4_id();
221 renderer->camera_rotation = mat4_id();
214 return true; 222 return true;
215 223
216cleanup: 224cleanup:
@@ -278,7 +286,7 @@ void gfx_llr_set_skeleton(
278 renderer->skeleton_changed = true; 286 renderer->skeleton_changed = true;
279} 287}
280 288
281void gfx_llr_unset_skeleton(LLR* renderer) { 289void gfx_llr_clear_skeleton(LLR* renderer) {
282 assert(renderer); 290 assert(renderer);
283 291
284 renderer->num_joints = 0; 292 renderer->num_joints = 0;
@@ -288,22 +296,22 @@ void gfx_llr_unset_skeleton(LLR* renderer) {
288void gfx_llr_set_camera(LLR* renderer, const Camera* camera) { 296void gfx_llr_set_camera(LLR* renderer, const Camera* camera) {
289 assert(renderer); 297 assert(renderer);
290 298
291 const mat4 view = spatial3_inverse_transform(&camera->spatial); 299 renderer->camera_position = camera->spatial.p;
292 // const mat4 view_proj = mat4_mul(camera->projection, view); 300 renderer->camera_rotation =
293 // gfx_llr_set_view_projection_matrix(renderer, &view_proj); 301 mat4_rotation(spatial3_transform(&camera->spatial));
294 renderer->view = view; 302 renderer->view = spatial3_inverse_transform(&camera->spatial);
295 renderer->projection = camera->projection; 303 renderer->projection = camera->projection;
304 // Assuming a perspective matrix.
305 renderer->fovy = (R)atan(1.0 / (mat4_at(camera->projection, 1, 1))) * 2;
296 renderer->camera_changed = true; 306 renderer->camera_changed = true;
297} 307}
298 308
299// void gfx_llr_set_view_projection_matrix( 309void gfx_llr_set_aspect(LLR* renderer, float aspect) {
300// LLR* renderer, const mat4* view_proj) { 310 assert(renderer);
301// assert(renderer); 311
302// assert(renderer->shader); 312 renderer->aspect = aspect;
303// 313 renderer->camera_changed = true;
304// gfx_llr_flush(renderer); 314}
305// gfx_set_mat4_uniform(renderer->shader, "ViewProjection", view_proj);
306// }
307 315
308void gfx_llr_render_geometry(LLR* renderer, const Geometry* geometry) { 316void gfx_llr_render_geometry(LLR* renderer, const Geometry* geometry) {
309 assert(renderer); 317 assert(renderer);