From 91ddd33343448b5d412be980cbab5c0048185f41 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sat, 23 Dec 2023 15:11:07 +0300 Subject: [PATCH] Lowered precision of camera stuff --- src/CRE/camera.cpp | 100 +++++++++++++++++----------------- src/CRE/camera.hpp | 46 ++++++++-------- src/CRE/render.cpp | 2 +- src/CRE/render_manager.cpp | 4 +- src/CRE/sprite.cpp | 2 +- src/KKdLib/mat.cpp | 44 +++++++-------- src/KKdLib/mat.hpp | 10 ++-- src/ReDIVA/glitter_editor.cpp | 16 +++--- src/ReDIVA/render.cpp | 6 +- 9 files changed, 115 insertions(+), 115 deletions(-) diff --git a/src/CRE/camera.cpp b/src/CRE/camera.cpp index 5bf4303e..07b21b44 100644 --- a/src/CRE/camera.cpp +++ b/src/CRE/camera.cpp @@ -24,7 +24,7 @@ camera::~camera() { void camera::initialize(double_t aspect) { this->aspect = aspect; - fov = 0.0; + fov = 0.0f; fov_correct_height = 0.0f; aet_depth = 0.0f; forward = { 0.0f, 0.0f, -1.0f }; @@ -48,24 +48,24 @@ void camera::initialize(double_t aspect) { ignore_fov = false; ignore_min_dist = false; - set_view_point({ 0.0, 0.0f, 0.0f }); + set_view_point({ 0.0f, 0.0f, 0.0f }); set_interest({ 0.0f, 0.0f, -1.0f }); - set_min_distance(0.05); - set_max_distance(6000.0); - set_pitch(0.0); - set_yaw(0.0); - set_roll(0.0); - set_fov(32.2673416137695); + set_min_distance(0.05f); + set_max_distance(6000.0f); + set_pitch(0.0f); + set_yaw(0.0f); + set_roll(0.0f); + set_fov(32.2673416137695f); camera_calculate_forward(this); set_position(0.0f); update(); } -double_t camera::get_min_distance() { +float_t camera::get_min_distance() { return min_distance; } -void camera::set_min_distance(double_t value) { +void camera::set_min_distance(float_t value) { if (!ignore_min_dist && min_distance != value) { min_distance = value; changed_proj = true; @@ -73,11 +73,11 @@ void camera::set_min_distance(double_t value) { } } -double_t camera::get_max_distance() { +float_t camera::get_max_distance() { return max_distance; } -void camera::set_max_distance(double_t value) { +void camera::set_max_distance(float_t value) { if (max_distance != value) { max_distance = value; changed_proj = true; @@ -95,50 +95,50 @@ void camera::set_aspect(double_t value) { } } -double_t camera::get_fov() { +float_t camera::get_fov() { return fov; } -void camera::set_fov(double_t value) { - value = clamp_def(value, 1.0, 180.0); +void camera::set_fov(float_t value) { + value = clamp_def(value, 1.0f, 180.0f); if (!ignore_fov && fov != value) { fov = value; - fov_rad = value * DEG_TO_RAD; + fov_rad = value * DEG_TO_RAD_FLOAT; changed_proj = true; } } -double_t camera::get_pitch() { +float_t camera::get_pitch() { return pitch; } -void camera::set_pitch(double_t value) { - value = fmod(value, 360.0); - value = clamp_def(value, -89.5, 89.5); +void camera::set_pitch(float_t value) { + value = fmodf(value, 360.0f); + value = clamp_def(value, -89.5f, 89.5f); if (pitch != value) { pitch = value; changed_view = true; } } -double_t camera::get_yaw() { +float_t camera::get_yaw() { return yaw; } -void camera::set_yaw(double_t value) { - value = fmod(value, 360.0); +void camera::set_yaw(float_t value) { + value = fmodf(value, 360.0f); if (yaw != value) { yaw = value; changed_view = true; } } -double_t camera::get_roll() { +float_t camera::get_roll() { return roll; } -void camera::set_roll(double_t value) { - value = fmod(value, 360.0); +void camera::set_roll(float_t value) { + value = fmodf(value, 360.0f); if (roll != value) { roll = value; changed_view = true; @@ -236,12 +236,12 @@ void camera::set_ignore_min_dist(bool value) { } void camera::reset() { - set_pitch(0.0); - set_yaw(0.0); - set_roll(0.0); - set_fov(32.2673416137695); - min_distance = 0.05; - max_distance = 6000.0; + set_pitch(0.0f); + set_yaw(0.0f); + set_roll(0.0f); + set_fov(32.2673416137695f); + min_distance = 0.05f; + max_distance = 6000.0f; changed_proj = true; changed_proj_aet = true; changed_view = true; @@ -255,8 +255,8 @@ void camera::reset() { update_data(); } -void camera::move(double_t move_x, double_t move_y) { - if (move_x != 0.0 || move_y != 0.0) { +void camera::move(float_t move_x, float_t move_y) { + if (move_x != 0.0f || move_y != 0.0f) { vec3 up = { 0.0f, 1.0f, 0.0f }; vec3 view_point = this->view_point; view_point += vec3::normalize(vec3::cross(forward, up)) * (float_t)move_y; @@ -266,14 +266,14 @@ void camera::move(double_t move_x, double_t move_y) { } } -void camera::rotate(double_t rotate_x, double_t rotate_y) { - if (rotate_x != 0.0) +void camera::rotate(float_t rotate_x, float_t rotate_y) { + if (rotate_x != 0.0f) set_yaw(get_yaw() + rotate_x); - if (rotate_y != 0.0) + if (rotate_y != 0.0f) set_pitch(get_pitch() + rotate_y); - if (rotate_x != 0.0 || rotate_y != 0.0) { + if (rotate_x != 0.0f || rotate_y != 0.0f) { camera_calculate_forward(this); set_interest(view_point + forward); @@ -281,11 +281,11 @@ void camera::rotate(double_t rotate_x, double_t rotate_y) { } void camera::set(const vec3& view_point, const vec3& interest, - const vec3& trans, const vec3& rot, const vec3& scale, double_t roll, double_t fov) { + const vec3& trans, const vec3& rot, const vec3& scale, float_t roll, float_t fov) { vec3 _vp; vec3 _int; - double_t _roll; - double_t _fov; + float_t _roll; + float_t _fov; _vp = view_point; _int = interest; @@ -306,8 +306,8 @@ void camera::set(const vec3& view_point, const vec3& interest, } void camera::set(const vec3&& view_point, const vec3&& interest, - const vec3&& trans, const vec3&& rot, const vec3&& scale, double_t roll, double_t fov) { - set(*(vec3*)&view_point, *(vec3*)&interest, *(vec3*)&trans, *(vec3*)&rot, *(vec3*)&scale, roll, fov); + const vec3&& trans, const vec3&& rot, const vec3&& scale, float_t roll, float_t fov) { + set(view_point, interest, trans, rot, scale, roll, fov); } void camera::set_position(const vec3& pos) { @@ -355,7 +355,7 @@ static void camera_calculate_forward(camera* c) { } static void camera_calculate_projection(camera* c) { - mat4_persp(c->fov_rad, c->aspect, c->min_distance, c->max_distance, &c->projection); + mat4_persp(c->fov_rad, (float_t)c->aspect, c->min_distance, c->max_distance, &c->projection); mat4_invert(&c->projection, &c->inv_projection); resolution_struct* res_wind_int = res_window_internal_get(); @@ -469,10 +469,10 @@ static void camera_calculate_view(camera* c) { mat4_from_mat3(&c->view_mat3, &c->view_rot); mat4_from_mat3(&c->inv_view_mat3, &c->inv_view_rot); - if (fabs(c->rotation.x * RAD_TO_DEG - c->pitch) > 0.01 - || fabs(-c->rotation.y * RAD_TO_DEG - c->yaw) > 0.01) { - c->pitch = c->rotation.x * RAD_TO_DEG; - c->yaw = -c->rotation.y * RAD_TO_DEG; + if (fabsf(c->rotation.x * RAD_TO_DEG_FLOAT - c->pitch) > 0.01f + || fabsf(-c->rotation.y * RAD_TO_DEG_FLOAT - c->yaw) > 0.01f) { + c->pitch = c->rotation.x * RAD_TO_DEG_FLOAT; + c->yaw = -c->rotation.y * RAD_TO_DEG_FLOAT; camera_calculate_forward(c); } } @@ -497,8 +497,8 @@ void cam_struct::get(camera* cam) { void cam_struct::set(camera* cam) { cam->set_view_point(view_point); cam->set_interest(interest); - cam->set_fov(fov * RAD_TO_DEG); - cam->set_roll(roll * RAD_TO_DEG); + cam->set_fov(fov * RAD_TO_DEG_FLOAT); + cam->set_roll(roll * RAD_TO_DEG_FLOAT); cam->set_up(use_up, up); cam->set_min_distance(min_distance); } diff --git a/src/CRE/camera.hpp b/src/CRE/camera.hpp index 214bdd19..ea58e93b 100644 --- a/src/CRE/camera.hpp +++ b/src/CRE/camera.hpp @@ -36,14 +36,14 @@ struct camera { vec3 field_1F0; vec3 field_1FC; vec3 field_208; - double_t yaw; - double_t pitch; - double_t roll; + float_t yaw; + float_t pitch; + float_t roll; double_t aspect; - double_t fov; - double_t fov_rad; - double_t max_distance; - double_t min_distance; + float_t fov; + float_t fov_rad; + float_t max_distance; + float_t min_distance; bool changed_view; bool changed_proj; bool changed_proj_aet; @@ -57,20 +57,20 @@ struct camera { ~camera(); void initialize(double_t aspect); - double_t get_min_distance(); - void set_min_distance(double_t value); - double_t get_max_distance(); - void set_max_distance(double_t value); + float_t get_min_distance(); + void set_min_distance(float_t value); + float_t get_max_distance(); + void set_max_distance(float_t value); double_t get_aspect(); void set_aspect(double_t value); - double_t get_fov(); - void set_fov(double_t value); - double_t get_pitch(); - void set_pitch(double_t value); - double_t get_yaw(); - void set_yaw(double_t value); - double_t get_roll(); - void set_roll(double_t value); + float_t get_fov(); + void set_fov(float_t value); + float_t get_pitch(); + void set_pitch(float_t value); + float_t get_yaw(); + void set_yaw(float_t value); + float_t get_roll(); + void set_roll(float_t value); void get_view_point(vec3& value); void get_view_point(vec4& value); void set_view_point(const vec3& value); @@ -87,12 +87,12 @@ struct camera { void set_ignore_fov(bool value); void set_ignore_min_dist(bool value); void reset(); - void move(double_t move_x, double_t move_y); - void rotate(double_t rotate_x, double_t rotate_y); + void move(float_t move_x, float_t move_y); + void rotate(float_t rotate_x, float_t rotate_y); void set(const vec3& view_point, const vec3& interest, - const vec3& trans, const vec3& rot, const vec3& scale, double_t roll, double_t fov); + const vec3& trans, const vec3& rot, const vec3& scale, float_t roll, float_t fov); void set(const vec3&& view_point, const vec3&& interest, - const vec3&& trans, const vec3&& rot, const vec3&& scale, double_t roll, double_t fov); + const vec3&& trans, const vec3&& rot, const vec3&& scale, float_t roll, float_t fov); void set_position(const vec3& pos); void set_position(const vec3&& pos); void update(); diff --git a/src/CRE/render.cpp b/src/CRE/render.cpp index 00675dd3..992f9625 100644 --- a/src/CRE/render.cpp +++ b/src/CRE/render.cpp @@ -511,7 +511,7 @@ namespace rndr { gl_state_bind_vertex_array(0); if (lens_flare_appear_power <= 0.01f) - lens_flare_appear_power = 0.0; + lens_flare_appear_power = 0.0f; else lens_flare_appear_power *= 0.93f; lens_shaft_scale = 100.0f; diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 2964c406..7601d9ca 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -915,8 +915,8 @@ namespace rndr { #if defined(CRE_DEV) if (Glitter::glt_particle_manager->CheckHasLocalEffect()) { // X camera* cam = rctx->camera; - double_t fov = cam->get_fov(); - cam->set_fov(32.2673416137695); + float_t fov = cam->get_fov(); + cam->set_fov(32.2673416137695f); draw_pass_set_camera(); rctx->obj_scene_ubo.WriteMemory(rctx->obj_scene); diff --git a/src/CRE/sprite.cpp b/src/CRE/sprite.cpp index 5c87894b..60299379 100644 --- a/src/CRE/sprite.cpp +++ b/src/CRE/sprite.cpp @@ -798,7 +798,7 @@ namespace spr { float_t v15b = sprite_half_height * 0.2f * aet_depth_1; mat4 proj; - mat4_frustrum(-v15a, v15a, v15b, -v15b, 0.2, 3000.0, &proj); + mat4_frustrum(-v15a, v15a, v15b, -v15b, 0.2f, 3000.0f, &proj); vec3 eye = { sprite_half_width, sprite_half_height, aet_depth }; vec3 target = { sprite_half_width, sprite_half_height, 0.0f }; diff --git a/src/KKdLib/mat.cpp b/src/KKdLib/mat.cpp index 969b3319..a4a69418 100644 --- a/src/KKdLib/mat.cpp +++ b/src/KKdLib/mat.cpp @@ -1933,39 +1933,39 @@ void mat4_lerp_rotation(const mat4* in_m1, const mat4* in_m2, mat4* out_m, float *(vec3*)&out_m->row2 = m2; } -inline void mat4_frustrum(double_t left, double_t right, - double_t bottom, double_t top, double_t z_near, double_t z_far, mat4* out_m) { +inline void mat4_frustrum(float_t left, float_t right, + float_t bottom, float_t top, float_t z_near, float_t z_far, mat4* out_m) { *out_m = mat4_null; - out_m->row0.x = (float_t)((2.0 * z_near) / (right - left)); - out_m->row1.y = (float_t)((2.0 * z_near) / (top - bottom)); - out_m->row2.x = (float_t)((right + left) / (right - left)); - out_m->row2.y = (float_t)((top + bottom) / (top - bottom)); - out_m->row2.z = -(float_t)((z_far + z_near) / (z_far - z_near)); + out_m->row0.x = (2.0f * z_near) / (right - left); + out_m->row1.y = (2.0f * z_near) / (top - bottom); + out_m->row2.x = (right + left) / (right - left); + out_m->row2.y = (top + bottom) / (top - bottom); + out_m->row2.z = -((z_far + z_near) / (z_far - z_near)); out_m->row2.w = -1.0f; - out_m->row3.z = -(float_t)((2.0 * z_far * z_near) / (z_far - z_near)); + out_m->row3.z = -((2.0f * z_far * z_near) / (z_far - z_near)); } -inline void mat4_ortho(double_t left, double_t right, - double_t bottom, double_t top, double_t z_near, double_t z_far, mat4* out_m) { +inline void mat4_ortho(float_t left, float_t right, + float_t bottom, float_t top, float_t z_near, float_t z_far, mat4* out_m) { *out_m = mat4_null; - out_m->row0.x = (float_t)(2.0 / (right - left)); - out_m->row1.y = (float_t)(2.0 / (top - bottom)); - out_m->row2.z = (float_t)(-2.0 / (z_far - z_near)); - out_m->row3.x = -(float_t)((right + left) / (right - left)); - out_m->row3.y = -(float_t)((top + bottom) / (top - bottom)); - out_m->row3.z = -(float_t)((z_far + z_near) / (z_far - z_near)); + out_m->row0.x = 2.0f / (right - left); + out_m->row1.y = 2.0f / (top - bottom); + out_m->row2.z = -2.0f / (z_far - z_near); + out_m->row3.x = -((right + left) / (right - left)); + out_m->row3.y = -((top + bottom) / (top - bottom)); + out_m->row3.z = -((z_far + z_near) / (z_far - z_near)); out_m->row3.w = 1.0f; } -inline void mat4_persp(double_t fov_y, double_t aspect, double_t z_near, double_t z_far, mat4* out_m) { - double_t tan_fov = tan(fov_y * 0.5); +inline void mat4_persp(float_t fov_y, float_t aspect, float_t z_near, float_t z_far, mat4* out_m) { + float_t tan_fov = tanf(fov_y * 0.5f); *out_m = mat4_null; - out_m->row0.x = (float_t)(1.0 / (aspect * tan_fov)); - out_m->row1.y = (float_t)(1.0 / tan_fov); - out_m->row2.z = -(float_t)((z_far + z_near) / (z_far - z_near)); + out_m->row0.x = 1.0f / (aspect * tan_fov); + out_m->row1.y = 1.0f / tan_fov; + out_m->row2.z = -((z_far + z_near) / (z_far - z_near)); out_m->row2.w = -1.0f; - out_m->row3.z = -(float_t)((2.0 * z_far * z_near) / (z_far - z_near)); + out_m->row3.z = -((2.0f * z_far * z_near) / (z_far - z_near)); } inline void mat4_look_at(const vec3* eye, const vec3* target, const vec3* up, mat4* out_m) { diff --git a/src/KKdLib/mat.hpp b/src/KKdLib/mat.hpp index 4f0cde1f..194c9362 100644 --- a/src/KKdLib/mat.hpp +++ b/src/KKdLib/mat.hpp @@ -196,11 +196,11 @@ extern float_t mat4_get_max_scale(const mat4* in_m1); extern void mat4_blend(const mat4* in_m1, const mat4* in_m2, mat4* out_m, float_t blend); extern void mat4_blend_rotation(const mat4* in_m1, const mat4* in_m2, mat4* out_m, float_t blend); extern void mat4_lerp_rotation(const mat4* in_m1, const mat4* in_m2, mat4* out_m, float_t blend); -extern void mat4_frustrum(double_t left, double_t right, - double_t bottom, double_t top, double_t z_near, double_t z_far, mat4* out_m); -extern void mat4_ortho(double_t left, double_t right, - double_t bottom, double_t top, double_t z_near, double_t z_far, mat4* out_m); -extern void mat4_persp(double_t fov_y, double_t aspect, double_t z_near, double_t z_far, mat4* out_m); +extern void mat4_frustrum(float_t left, float_t right, + float_t bottom, float_t top, float_t z_near, float_t z_far, mat4* out_m); +extern void mat4_ortho(float_t left, float_t right, + float_t bottom, float_t top, float_t z_near, float_t z_far, mat4* out_m); +extern void mat4_persp(float_t fov_y, float_t aspect, float_t z_near, float_t z_far, mat4* out_m); extern void mat4_look_at(const vec3* eye, const vec3* target, const vec3* up, mat4* out_m); extern void mat4_look_at(const vec3* eye, const vec3* target, mat4* out_m); diff --git a/src/ReDIVA/glitter_editor.cpp b/src/ReDIVA/glitter_editor.cpp index c325f62a..0d5df1e3 100644 --- a/src/ReDIVA/glitter_editor.cpp +++ b/src/ReDIVA/glitter_editor.cpp @@ -2438,10 +2438,10 @@ static void glitter_editor_test_window(GlitterEditor* glt_edt) { camera* cam = rctx_ptr->camera; - static const double_t fov_min = 0.0; - static const double_t fov_max = 180.0; - double_t fov = cam->get_fov(); - if (ImGui::SliderScalar("Camera FOV", ImGuiDataType_Double, &fov, &fov_min, &fov_max, "%g")) + static const float_t fov_min = 0.0; + static const float_t fov_max = 180.0; + float_t fov = cam->get_fov(); + if (ImGui::SliderScalar("Camera FOV", ImGuiDataType_Float, &fov, &fov_min, &fov_max, "%g")) cam->set_fov(fov); input_locked |= ImGui::IsWindowFocused(); @@ -3119,10 +3119,10 @@ static void glitter_editor_play_manager(GlitterEditor* glt_edt) { camera* cam = rctx_ptr->camera; - static const double_t fov_min = 0.0; - static const double_t fov_max = 180.0; - double_t fov = cam->get_fov(); - if (ImGui::SliderScalar("Camera FOV", ImGuiDataType_Double, &fov, &fov_min, &fov_max, "%g")) + static const float_t fov_min = 0.0f; + static const float_t fov_max = 180.0f; + float_t fov = cam->get_fov(); + if (ImGui::SliderScalar("Camera FOV", ImGuiDataType_Float, &fov, &fov_min, &fov_max, "%g")) cam->set_fov(fov); } diff --git a/src/ReDIVA/render.cpp b/src/ReDIVA/render.cpp index c7dc6b8e..a4ca7935 100644 --- a/src/ReDIVA/render.cpp +++ b/src/ReDIVA/render.cpp @@ -1080,10 +1080,10 @@ static void render_context_ctrl(render_context* rctx) { cam->set_interest({ 0.0f, 1.4f, 0.0f }); } else { - cam->rotate(input_rotate_x, input_rotate_y); - cam->move(input_move_x, input_move_y); + cam->rotate((float_t)input_rotate_x, (float_t)input_rotate_y); + cam->move((float_t)input_move_x, (float_t)input_move_y); if (input_roll != 0.0) - cam->set_roll(cam->get_roll() + input_roll); + cam->set_roll(cam->get_roll() + (float_t)input_roll); } }