Move world position and rotation to function parameters instead of using globals directly

main
noah metz 2024-01-08 17:55:50 -07:00
parent 62b6f55a14
commit 6906e4fc38
1 changed files with 12 additions and 12 deletions

@ -1745,39 +1745,39 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
}
}
VkResult update_ubo(void** buffers, uint32_t frame_index) {
VkResult update_scene_ubo(void** buffers, uint32_t frame_index, vec3 world_position, float* rotation, float aspect_ratio, float time_delta) {
vec3 movement_sum = {0.0f, 0.0f, 0.0f};
if(key_flags.forward) {
movement_sum[2] += 0.01;
movement_sum[2] += 1 * time_delta;
}
if(key_flags.backward) {
movement_sum[2] -= 0.01;
movement_sum[2] -= 1 * time_delta;
}
if(key_flags.left) {
movement_sum[0] -= 0.01;
movement_sum[0] -= 1 * time_delta;
}
if(key_flags.right) {
movement_sum[0] += 0.01;
movement_sum[0] += 1 * time_delta;
}
if(key_flags.up) {
movement_sum[1] += 0.01;
movement_sum[1] += 1 * time_delta;
}
if(key_flags.down) {
movement_sum[1] -= 0.01;
movement_sum[1] -= 1 * time_delta;
}
if(key_flags.turn_right) {
rotation -= 0.01;
*rotation -= 1 * time_delta;
}
if(key_flags.turn_left) {
rotation += 0.01;
*rotation += 1 * time_delta;
}
vec3 forward = {0.0f, 0.0f, 1.0f};
@ -1785,7 +1785,7 @@ VkResult update_ubo(void** buffers, uint32_t frame_index) {
vec3 dir;
mat4 rot;
glm_rotate_make(rot, rotation, up);
glm_rotate_make(rot, *rotation, up);
glm_mat4_mulv3(rot, forward, 1.0f, dir);
vec3 movement_rot;
@ -1793,7 +1793,7 @@ VkResult update_ubo(void** buffers, uint32_t frame_index) {
glm_vec3_add(movement_rot, world_position, world_position);
struct SceneUBO ubo = {};
glm_perspective(90.0f, 800.0/600.0, 0.1, 100, ubo.proj);
glm_perspective(90.0f, aspect_ratio, 0.1, 100, ubo.proj);
glm_look(world_position, dir, up, ubo.view);
memcpy(buffers[frame_index], (void*)&ubo, sizeof(ubo));
@ -1802,7 +1802,7 @@ VkResult update_ubo(void** buffers, uint32_t frame_index) {
}
VkResult draw_frame(VulkanContext* context) {
update_ubo(context->scene_ubo_ptrs, context->current_frame);
update_scene_ubo(context->scene_ubo_ptrs, context->current_frame, world_position, &rotation, (float)context->swapchain_extent.width/(float)context->swapchain_extent.height, 0.01);
VkResult result;
result = vkWaitForFences(context->device, 1, &context->in_flight_fences[context->current_frame], VK_TRUE, UINT64_MAX);