From 0e58a8b3850209fc165255bf3d09666ef66e9b33 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Mon, 24 Jun 2024 12:02:32 +0300 Subject: [PATCH] TAA fixes --- src/CRE/Glitter/particle_manager.cpp | 2 - src/CRE/camera.cpp | 109 ++++--------------- src/CRE/camera.hpp | 3 - src/CRE/mdl/disp_manager.cpp | 1 - src/CRE/render_context.cpp | 3 +- src/CRE/render_manager.cpp | 5 - src/ReDIVA/app.cpp | 6 - src/ReDIVA/classes/graphics/post_process.cpp | 4 +- src/ReDIVA/x_pv_game.cpp | 2 + 9 files changed, 28 insertions(+), 107 deletions(-) diff --git a/src/CRE/Glitter/particle_manager.cpp b/src/CRE/Glitter/particle_manager.cpp index 72036a45..3eadbf1a 100644 --- a/src/CRE/Glitter/particle_manager.cpp +++ b/src/CRE/Glitter/particle_manager.cpp @@ -211,7 +211,6 @@ namespace Glitter { void GltParticleManager::CtrlScenes() { camera* c = rctx_ptr->camera; - c->update_data(); cam.projection = c->projection; cam.view = c->view; cam.inv_view = c->inv_view; @@ -255,7 +254,6 @@ namespace Glitter { return; camera* c = rctx_ptr->camera; - c->update_data(); cam.projection = c->projection; cam.view = c->view; cam.inv_view = c->inv_view; diff --git a/src/CRE/camera.cpp b/src/CRE/camera.cpp index 09c1eef4..7fb0648a 100644 --- a/src/CRE/camera.cpp +++ b/src/CRE/camera.cpp @@ -12,8 +12,8 @@ static void camera_calculate_view(camera* c); static void camera_calculate_forward(camera* c); camera::camera() : forward(), rotation(), view_point(), interest(), depth(), aet_depth(), -use_up(), field_1E4(), field_1F0(), field_1FC(), field_208(), yaw(), pitch(), roll(), aspect(), -fov(), aet_fov(), max_distance(), min_distance(), changed_view(), changed_proj(), +use_up(), field_1E4(), field_1F0(), field_1FC(), field_208(), yaw(), pitch(), roll(), +aspect(), fov(), aet_fov(), max_distance(), min_distance(), fast_change(), fast_change_hist0(), fast_change_hist1(), ignore_fov(), ignore_min_dist() { } @@ -46,10 +46,8 @@ float_t camera::get_min_distance() { } void camera::set_min_distance(float_t value) { - if (!ignore_min_dist && min_distance != value) { + if (!ignore_min_dist) min_distance = value; - changed_proj = true; - } } float_t camera::get_max_distance() { @@ -57,10 +55,7 @@ float_t camera::get_max_distance() { } void camera::set_max_distance(float_t value) { - if (max_distance != value) { - max_distance = value; - changed_proj = true; - } + max_distance = value; } double_t camera::get_aspect() { @@ -68,10 +63,7 @@ double_t camera::get_aspect() { } void camera::set_aspect(double_t value) { - if (aspect != value) { - aspect = value; - changed_proj = true; - } + aspect = value; } float_t camera::get_fov() { @@ -79,11 +71,7 @@ float_t camera::get_fov() { } void camera::set_fov(float_t value) { - value = clamp_def(value, 1.0f, 180.0f); - if (!ignore_fov && fov != value) { - fov = value; - changed_proj = true; - } + fov = clamp_def(value, 1.0f, 180.0f); } float_t camera::get_pitch() { @@ -92,11 +80,7 @@ float_t camera::get_pitch() { 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; - } + pitch = clamp_def(value, -89.5f, 89.5f); } float_t camera::get_yaw() { @@ -104,11 +88,7 @@ float_t camera::get_yaw() { } void camera::set_yaw(float_t value) { - value = fmodf(value, 360.0f); - if (yaw != value) { - yaw = value; - changed_view = true; - } + yaw = fmodf(value, 360.0f); } float_t camera::get_roll() { @@ -116,11 +96,7 @@ float_t camera::get_roll() { } void camera::set_roll(float_t value) { - value = fmodf(value, 360.0f); - if (roll != value) { - roll = value; - changed_view = true; - } + roll = fmodf(value, 360.0f); } void camera::get_view_point(vec3& value) { @@ -133,17 +109,11 @@ void camera::get_view_point(vec4& value) { } void camera::set_view_point(const vec3& value) { - if (view_point != value) { - view_point = value; - changed_view = true; - } + view_point = value; } void camera::set_view_point(const vec3&& value) { - if (view_point != value) { - view_point = value; - changed_view = true; - } + view_point = value; } void camera::get_interest(vec3& value) { @@ -151,17 +121,11 @@ void camera::get_interest(vec3& value) { } void camera::set_interest(const vec3& value) { - if (interest != value) { - interest = value; - changed_view = true; - } + interest = value; } void camera::set_interest(const vec3&& value) { - if (interest != value) { - interest = value; - changed_view = true; - } + interest = value; } void camera::get_up(bool& use_up, vec3& value) { @@ -170,27 +134,13 @@ void camera::get_up(bool& use_up, vec3& value) { } void camera::set_up(bool use_up, const vec3& value) { - if (this->use_up != use_up) { - this->use_up = use_up; - changed_view = true; - } - - if (up != value) { - up = value; - changed_view = true; - } + this->use_up = use_up; + up = value; } void camera::set_up(bool use_up, const vec3&& value) { - if (this->use_up != use_up) { - this->use_up = use_up; - changed_view = true; - } - - if (up != value) { - up = value; - changed_view = true; - } + this->use_up = use_up; + up = value; } void camera::set_fast_change(bool value) { @@ -220,8 +170,6 @@ void camera::reset() { set_fov(32.2673416137695f); set_min_distance(0.05f); set_max_distance(6000.0f); - changed_proj = true; - changed_view = true; fast_change = false; fast_change_hist0 = false; fast_change_hist1 = false; @@ -229,7 +177,6 @@ void camera::reset() { up = { 0.0f, 1.0f, 0.0f }; camera_calculate_forward(this); set_position(0.0f); - update_data(); } void camera::move(float_t move_x, float_t move_y) { @@ -298,29 +245,17 @@ void camera::set_position(const vec3&& pos) { } void camera::update() { - update_data(); + camera_calculate_projection(this); + camera_calculate_view(this); + + mat4_mul(&view, &projection, &view_projection); + mat4_invert(&view_projection, &inv_view_projection); fast_change_hist1 = fast_change_hist0; fast_change_hist0 = fast_change; fast_change = false; } -void camera::update_data() { - if (changed_proj) - camera_calculate_projection(this); - - if (changed_view) - camera_calculate_view(this); - - if (changed_proj || changed_view) { - mat4_mul(&view, &projection, &view_projection); - mat4_invert(&view_projection, &inv_view_projection); - } - - changed_proj = false; - changed_view = false; -} - static void camera_calculate_forward(camera* c) { c->forward.x = (float_t)(cos(c->pitch * DEG_TO_RAD) * sin(c->yaw * DEG_TO_RAD)); c->forward.y = (float_t)sin(c->pitch * DEG_TO_RAD); diff --git a/src/CRE/camera.hpp b/src/CRE/camera.hpp index 2d9b61e2..34583eeb 100644 --- a/src/CRE/camera.hpp +++ b/src/CRE/camera.hpp @@ -51,8 +51,6 @@ struct camera { vec3 forward; float_t yaw; float_t pitch; - bool changed_view; - bool changed_proj; camera(); ~camera(); @@ -97,7 +95,6 @@ struct camera { void set_position(const vec3& pos); void set_position(const vec3&& pos); void update(); - void update_data(); }; struct cam_struct { diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index 8ff39afb..998c6158 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -2367,7 +2367,6 @@ namespace mdl { } ::camera* cam = rctx_ptr->camera; - cam->update_data(); if (!local && object_culling && !instances_count && !bone_mat && (!object || !obj_bounding_sphere_check_visibility( diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index cc356bd9..7ed0cefd 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -641,9 +641,10 @@ void render_context::ctrl() { void render_context::disp() { rctx_ptr = this; disp_manager->refresh(); - sprite_manager_reset_req_list(); draw_state->stats_prev = draw_state->stats; draw_state->stats.reset(); + sprite_manager_reset_req_list(); + camera->update(); app::TaskWork::disp(); shadow_ptr_get()->ctrl(); int32_t sprite_index = sprite_manager_get_index(); diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index c65bd87a..d8e451dc 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -375,7 +375,6 @@ namespace rndr { render_context* rctx = rctx_ptr; gl_state_begin_event("pass_shadow"); gl_state_begin_event("texproj"); - rctx->camera->update_data(); if (rctx->litproj->set()) { rctx->obj_scene_ubo.WriteMemory(rctx->obj_scene); @@ -467,7 +466,6 @@ namespace rndr { return; gl_state_begin_event("pass_ss_sss"); - rctx->camera->update_data(); rndr::Render* rend = render; //if (rend->render_width > 1280.0) // sss->npr_contour = false; @@ -769,7 +767,6 @@ namespace rndr { void RenderManager::pass_3d() { render_context* rctx = rctx_ptr; - rctx->camera->update_data(); render->bind_render_texture(); draw_pass_set_camera(); if (!rctx->sss_data->enable || !rctx->sss_data->npr_contour @@ -997,7 +994,6 @@ namespace rndr { void RenderManager::pass_post_process() { render_context* rctx = rctx_ptr; gl_state_begin_event("pass_post_process"); - rctx->camera->update_data(); texture* light_proj_tex = 0; light_proj* litproj = rctx->litproj; @@ -1149,7 +1145,6 @@ void image_filter_scale(RenderTexture* dst, texture* src, const vec4& scale) { void draw_pass_set_camera() { render_context* rctx = rctx_ptr; camera* cam = rctx->camera; - cam->update_data(); rctx->view_mat = cam->view; rctx->proj_mat = cam->projection; rctx->vp_mat = cam->view_projection; diff --git a/src/ReDIVA/app.cpp b/src/ReDIVA/app.cpp index 77c37e0a..174ff4a1 100644 --- a/src/ReDIVA/app.cpp +++ b/src/ReDIVA/app.cpp @@ -600,8 +600,6 @@ static render_context* render_context_load() { stru_140EDA5B0.ss_alpha_mask, stru_140EDA5B0.screen_shot_4x == 1);*/ - rctx_ptr->render_manager->render->set_taa(false); - objset_info_storage_init(aft_obj_db); stage_param_data_storage_init(); pv_expression_file_storage_init(); @@ -1156,8 +1154,6 @@ static void render_context_ctrl(render_context* rctx) { } static void render_context_disp(render_context* rctx) { - camera* cam = rctx->camera; - static const vec4 color_clear = 0.0f; static const GLfloat depth_clear = 1.0f; static const GLint stencil_clear = 0; @@ -1181,8 +1177,6 @@ static void render_context_disp(render_context* rctx) { gl_state_set_viewport(0, 0, internal_3d_res.x, internal_3d_res.y); - cam->update(); - rctx->disp(); #if BAKE_PNG || BAKE_VIDEO diff --git a/src/ReDIVA/classes/graphics/post_process.cpp b/src/ReDIVA/classes/graphics/post_process.cpp index b725698d..4796276f 100644 --- a/src/ReDIVA/classes/graphics/post_process.cpp +++ b/src/ReDIVA/classes/graphics/post_process.cpp @@ -68,11 +68,11 @@ void graphics_post_process_imgui(class_data* data) { bool taa = !!rend->taa; if (ImGui::CheckboxEnterKeyPressed("Temporal AA", &taa)) - rend->taa = taa ? 1 : 0; + rend->set_taa(taa ? 1 : 0); bool mlaa = !!rend->mlaa; if (ImGui::CheckboxEnterKeyPressed("Morphological AA", &mlaa)) - rend->mlaa = mlaa ? 1 : 0; + rend->set_mlaa(mlaa ? 1 : 0); ImGui::SetColumnSpace(1.0f / 4.0f); if (ImGui::TreeNode("Tone Trans")) { diff --git a/src/ReDIVA/x_pv_game.cpp b/src/ReDIVA/x_pv_game.cpp index 035514ee..87e1cb85 100644 --- a/src/ReDIVA/x_pv_game.cpp +++ b/src/ReDIVA/x_pv_game.cpp @@ -7467,6 +7467,8 @@ bool x_pv_game::ctrl() { #endif #if BAKE_PNG || BAKE_VIDEO + rctx_ptr->render_manager->render->set_taa(0); + extern bool disable_cursor; disable_cursor = true;