From 8ecfe5b056bc6b788d6d453c1f9a1c92e4b437c2 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sun, 8 Oct 2023 22:40:16 +0300 Subject: [PATCH] Tone map fixes --- src/CRE/auth_3d.cpp | 103 ++--- src/CRE/auth_3d.hpp | 8 +- src/CRE/post_process.cpp | 11 +- src/CRE/post_process/tone_map.cpp | 459 +++++++++---------- src/CRE/post_process/tone_map.hpp | 94 ++-- src/CRE/pv_param.cpp | 4 +- src/CRE/render_context.cpp | 23 +- src/ReDIVA/classes/graphics/post_process.cpp | 28 +- src/ReDIVA/pv_game/pv_game.cpp | 4 +- src/ReDIVA/pv_game/pv_game_pv_data.cpp | 18 +- src/ReDIVA/x_pv_game.cpp | 29 +- 11 files changed, 370 insertions(+), 411 deletions(-) diff --git a/src/CRE/auth_3d.cpp b/src/CRE/auth_3d.cpp index c8315b00..59aa3d43 100644 --- a/src/CRE/auth_3d.cpp +++ b/src/CRE/auth_3d.cpp @@ -1147,9 +1147,7 @@ namespace auth_3d_detail { return; } - rctx->post_process.tone_map->set_scene_fade_color(0.0f); - rctx->post_process.tone_map->set_scene_fade_alpha(0.0f); - rctx->post_process.tone_map->set_scene_fade_blend_func(0); + rctx->post_process.tone_map->reset_scene_fade(0); } void EventFilterFade::Disp(auth_3d* auth, const mat4* mat, render_context* rctx) { @@ -1163,14 +1161,14 @@ namespace auth_3d_detail { float_t t = (auth->frame - begin) / (end - begin); - float_t alpha; + vec4 value; + *(vec3*)&value = color; if (type == EventFilterFade::Type::FADE_IN) - alpha = t; + value.w = t; else - alpha = 1.0f - t; + value.w = 1.0f - t; - rctx->post_process.tone_map->set_scene_fade_color(color); - rctx->post_process.tone_map->set_scene_fade_alpha(alpha); + rctx->post_process.tone_map->set_scene_fade(value, 0); } EventFilterTimeStop::EventFilterTimeStop(a3da_event* e) : Event(e) { @@ -1668,7 +1666,7 @@ void auth_3d_dof::reset() { } auth_3d_fog::auth_3d_fog() : flags(), flags_init(), id(), density_value(), -end_value(), start_value(), color_init(), density_init(), end_init(), start_init() { +end_value(), start_value(), density_init(), end_init(), start_init() { reset(); } @@ -1708,8 +1706,8 @@ void auth_3d_fog::reset() { auth_3d_light::auth_3d_light() : flags(), flags_init(), id(), cone_angle_value(), constant_value(), drop_off_value(), far_value(), intensity_value(), linear_value(), -quadratic_value(), ambient_init(), cone_angle_init(), constant_init(), diffuse_init(), drop_off_init(), -far_init(), intensity_init(), linear_init(), quadratic_init(), specular_init(), tone_curve_init() { +quadratic_value(), cone_angle_init(), constant_init(), drop_off_init(), +far_init(), intensity_init(), linear_init(), quadratic_init(), tone_curve_init() { reset(); } @@ -2308,9 +2306,7 @@ void auth_3d_point::reset() { name.shrink_to_fit(); } -auth_3d_post_process::auth_3d_post_process() : flags(), flags_init(), -lens_flare_value(), lens_ghost_value(), lens_shaft_value(), intensity_init(), -lens_flare_init(), lens_ghost_init(), lens_shaft_init(), radius_init(), scene_fade_init() { +auth_3d_post_process::auth_3d_post_process() : flags(), flags_init() { reset(); } @@ -2322,11 +2318,11 @@ void auth_3d_post_process::interpolate(float_t frame) { if (flags & AUTH_3D_POST_PROCESS_INTENSITY) intensity.interpolate(frame); if (flags & AUTH_3D_POST_PROCESS_LENS_FLARE) - lens_flare_value = lens_flare.interpolate(frame); + lens_value.x = lens_flare.interpolate(frame); if (flags & AUTH_3D_POST_PROCESS_LENS_SHAFT) - lens_shaft_value = lens_shaft.interpolate(frame); + lens_value.y = lens_shaft.interpolate(frame); if (flags & AUTH_3D_POST_PROCESS_LENS_GHOST) - lens_ghost_value = lens_ghost.interpolate(frame); + lens_value.z = lens_ghost.interpolate(frame); if (flags & AUTH_3D_POST_PROCESS_RADIUS) radius.interpolate(frame); if (flags & AUTH_3D_POST_PROCESS_SCENE_FADE) @@ -2342,13 +2338,9 @@ void auth_3d_post_process::reset() { lens_shaft.reset(); radius.reset(); scene_fade.reset(); - lens_flare_value = 1.0f; - lens_ghost_value = 1.0f; - lens_shaft_value = 1.0f; + lens_value = 1.0f; intensity_init = 0.0f; - lens_flare_init = 1.0f; - lens_ghost_init = 1.0f; - lens_shaft_init = 1.0f; + lens_init = 1.0f; radius_init = 0.0f; scene_fade_init = 0.0f; } @@ -3835,13 +3827,13 @@ static void auth_3d_camera_auxiliary_restore_prev_value(auth_3d_camera_auxiliary if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_AUTO_EXPOSURE) tm->set_auto_exposure(true); if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_EXPOSURE) - tm->set_exposure(1.0); + tm->set_exposure(2.0); if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_GAMMA) tm->set_gamma(1.0); if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_GAMMA_RATE) tm->set_gamma_rate(1.0); if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_SATURATE) - tm->set_saturate_coeff(1.0); + tm->set_saturate_coeff(1.0, 0, false); } static void auth_3d_camera_auxiliary_set(auth_3d_camera_auxiliary* ca, render_context* rctx) { @@ -3856,7 +3848,7 @@ static void auth_3d_camera_auxiliary_set(auth_3d_camera_auxiliary* ca, render_co if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_GAMMA_RATE) tm->set_gamma_rate(ca->gamma_rate_value); if (ca->flags & AUTH_3D_CAMERA_AUXILIARY_SATURATE) - tm->set_saturate_coeff(ca->saturate_value); + tm->set_saturate_coeff(ca->saturate_value, 0, false); } static void auth_3d_camera_auxiliary_store(auth_3d* auth, auth_3d_camera_auxiliary_file* caf) { @@ -6784,20 +6776,23 @@ static void auth_3d_post_process_restore_prev_value(auth_3d_post_process* pp, re if (pp->flags_init & AUTH_3D_POST_PROCESS_INTENSITY) blur->set_intensity(pp->intensity_init); - if (pp->flags_init & AUTH_3D_POST_PROCESS_LENS_FLARE) - tm->set_lens_flare(pp->lens_flare_init); - - if (pp->flags_init & AUTH_3D_POST_PROCESS_LENS_GHOST) - tm->set_lens_ghost(pp->lens_ghost_init); - - if (pp->flags_init & AUTH_3D_POST_PROCESS_LENS_SHAFT) - tm->set_lens_shaft(pp->lens_shaft_init); + if (pp->flags_init & (AUTH_3D_POST_PROCESS_LENS_FLARE + | AUTH_3D_POST_PROCESS_LENS_GHOST | AUTH_3D_POST_PROCESS_LENS_SHAFT)) { + vec3 value = tm->get_lens(); + if (pp->flags_init & AUTH_3D_POST_PROCESS_LENS_FLARE) + value.x = pp->lens_init.x; + if (pp->flags_init & AUTH_3D_POST_PROCESS_LENS_SHAFT) + value.y = pp->lens_init.y; + if (pp->flags_init & AUTH_3D_POST_PROCESS_LENS_GHOST) + value.z = pp->lens_init.z; + tm->set_lens(value); + } if (pp->flags_init & AUTH_3D_POST_PROCESS_RADIUS) blur->set_radius(pp->radius_init); if (pp->flags_init & AUTH_3D_POST_PROCESS_SCENE_FADE) - tm->set_scene_fade(pp->scene_fade_init); + tm->set_scene_fade(pp->scene_fade_init, 0); } static void auth_3d_post_process_set(auth_3d_post_process* pp, render_context* rctx) { @@ -6813,31 +6808,27 @@ static void auth_3d_post_process_set(auth_3d_post_process* pp, render_context* r blur->set_intensity(*(vec3*)&pp->intensity.value); } - if (pp->flags & AUTH_3D_POST_PROCESS_LENS_FLARE) { - if (!(pp->flags_init & AUTH_3D_POST_PROCESS_LENS_FLARE)) { - pp->lens_flare_init = tm->get_lens_flare(); - enum_or(pp->flags_init, AUTH_3D_POST_PROCESS_LENS_FLARE); + if (pp->flags & (AUTH_3D_POST_PROCESS_LENS_GHOST + | AUTH_3D_POST_PROCESS_LENS_SHAFT | AUTH_3D_POST_PROCESS_LENS_FLARE)) { + vec3 value = tm->get_lens(); + if (pp->flags & AUTH_3D_POST_PROCESS_LENS_FLARE) { + if (!(pp->flags_init & AUTH_3D_POST_PROCESS_LENS_FLARE)) + pp->lens_init.x = value.x; + value.x = pp->lens_value.x; } - tm->set_lens_flare(pp->lens_flare_value); - } - - if (pp->flags & AUTH_3D_POST_PROCESS_LENS_GHOST) { - if (!(pp->flags_init & AUTH_3D_POST_PROCESS_LENS_GHOST)) { - pp->lens_ghost_init = tm->get_lens_ghost(); - enum_or(pp->flags_init, AUTH_3D_POST_PROCESS_LENS_GHOST); + if (pp->flags & AUTH_3D_POST_PROCESS_LENS_SHAFT) { + if (!(pp->flags_init & AUTH_3D_POST_PROCESS_LENS_SHAFT)) + pp->lens_init.y = value.y; + value.y = pp->lens_value.y; } - tm->set_lens_ghost(pp->lens_ghost_value); - } - - if (pp->flags & AUTH_3D_POST_PROCESS_LENS_SHAFT) { - if (!(pp->flags_init & AUTH_3D_POST_PROCESS_LENS_SHAFT)) { - pp->lens_shaft_init = tm->get_lens_shaft(); - enum_or(pp->flags_init, AUTH_3D_POST_PROCESS_LENS_SHAFT); + if (pp->flags & AUTH_3D_POST_PROCESS_LENS_GHOST) { + if (!(pp->flags_init & AUTH_3D_POST_PROCESS_LENS_GHOST)) + pp->lens_init.z = value.z; + value.z = pp->lens_value.z; } - - tm->set_lens_shaft(pp->lens_shaft_value); + tm->set_lens(value); } if (pp->flags & AUTH_3D_POST_PROCESS_RADIUS) { @@ -6855,7 +6846,7 @@ static void auth_3d_post_process_set(auth_3d_post_process* pp, render_context* r enum_or(pp->flags_init, AUTH_3D_POST_PROCESS_SCENE_FADE); } - tm->set_scene_fade(pp->scene_fade.value); + tm->set_scene_fade(pp->scene_fade.value, 0); } } diff --git a/src/CRE/auth_3d.hpp b/src/CRE/auth_3d.hpp index 97f7b77b..f8f194d6 100644 --- a/src/CRE/auth_3d.hpp +++ b/src/CRE/auth_3d.hpp @@ -767,14 +767,10 @@ struct auth_3d_post_process { auth_3d_rgba radius; auth_3d_rgba scene_fade; - float_t lens_flare_value; - float_t lens_ghost_value; - float_t lens_shaft_value; + vec3 lens_value; vec3 intensity_init; - float_t lens_flare_init; - float_t lens_ghost_init; - float_t lens_shaft_init; + vec3 lens_init; vec3 radius_init; vec4 scene_fade_init; diff --git a/src/CRE/post_process.cpp b/src/CRE/post_process.cpp index fc40063d..3177d5cb 100644 --- a/src/CRE/post_process.cpp +++ b/src/CRE/post_process.cpp @@ -576,7 +576,7 @@ void post_process::draw_lens_ghost(RenderTexture* rt) { } } - const float_t lens_ghost = tone_map->data.lens_ghost; + const float_t lens_ghost = tone_map->lens_ghost; const int32_t lens_ghost_count = this->lens_ghost_count; for (int32_t i = 0; i < lens_ghost_count; i++) { float_t opacity = v9 * v14[i] * lens_ghost; @@ -817,8 +817,13 @@ void post_process::reset() { mag_filter = POST_PROCESS_MAG_FILTER_BILINEAR; dof->initialize_data(0, 0); blur->initialize_data(2.0f, 1.0f); - tone_map->initialize_data(2.0f, true, 1.0f, 1, 1.0f, - 1.0f, 0.0f, 0, 0.0f, 1.0f, TONE_MAP_YCC_EXPONENT); + + for (int32_t i = 0; i < 2; i++) { + tone_map->reset_saturate_coeff(i, 0); + tone_map->reset_scene_fade(i); + tone_map->reset_tone_trans(i); + } + reset_exposure = true; } diff --git a/src/CRE/post_process/tone_map.cpp b/src/CRE/post_process/tone_map.cpp index 391c02ff..e2ee28be 100644 --- a/src/CRE/post_process/tone_map.cpp +++ b/src/CRE/post_process/tone_map.cpp @@ -15,13 +15,29 @@ static void post_process_tone_map_calculate_tex(post_process_tone_map* tm); extern render_context* rctx_ptr; -post_process_tone_map_data::post_process_tone_map_data() : tex_data(), exposure(), auto_exposure(), gamma(), -gamma_rate(), saturate_power(), saturate_coeff(), scene_fade_blend_func(), tone_map_method(), lens_flare(), -lens_shaft(), lens_ghost(), lens_flare_power(), lens_flare_appear_power(), update(), update_tex() { +post_process_tone_map::post_process_tone_map() : saturate_lock(), lens_shaft_scale(), +lens_flare_power(), lens_flare_appear_power(), saturate_index(), scene_fade_index(), +tone_trans_index(), saturate_coeff(), scene_fade_alpha(), scene_fade_blend_func(), +tone_map_method(), update(), shader_data(), tone_map_ubo(), tone_map_tex() { + exposure = 2.0f; + exposure_rate = 1.0f; + auto_exposure = true; + gamma = 1.0f; + gamma_rate = 1.0f; + saturate_power = 1; -} + for (int32_t i = 0; i < 2; i++) { + reset_saturate_coeff(i, 0); + reset_scene_fade(i); + reset_tone_trans(i); + } + + update_lut = true; + lens_shaft_inv_scale = 1.0f; + lens_flare = 1.0f; + lens_shaft = 1.0f; + lens_ghost = 1.0f; -post_process_tone_map::post_process_tone_map() : shader_data(), tone_map_ubo(), tone_map_tex() { tone_map_ubo.Create(sizeof(post_process_tone_map_shader_data)); } @@ -45,29 +61,28 @@ void post_process_tone_map::apply(RenderTexture* in_tex, texture* light_proj_tex set_lens_flare_power(pp->lens_flare_power); set_lens_flare_appear_power(pp->lens_flare_appear_power); - if (data.update) { - post_process_tone_map_calculate_data(this); - data.update = false; - } + post_process_tone_map_calculate_data(this); + + if (update_lut) { + update_lut = false; + saturate_lock = false; - if (data.update_tex) { post_process_tone_map_calculate_tex(this); if (GLAD_GL_VERSION_4_5) glTextureSubImage2D(tone_map_tex, 0, 0, 0, - 16 * POST_PROCESS_TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, data.tex_data); + 16 * POST_PROCESS_TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, tex_data); else { gl_state_bind_texture_2d(tone_map_tex); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, - 16 * POST_PROCESS_TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, data.tex_data); + 16 * POST_PROCESS_TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, tex_data); gl_state_bind_texture_2d(0); } - data.update_tex = false; } - uniform_value[U_TONE_MAP] = (int32_t)data.tone_map_method; + uniform_value[U_TONE_MAP] = (int32_t)tone_map_method; uniform_value[U_FLARE] = 0; - uniform_value[U_SCENE_FADE] = data.scene_fade.w > 0.009999999f ? 1 : 0; + uniform_value[U_SCENE_FADE] = scene_fade_alpha[scene_fade_index] > 0.009999999f ? 1 : 0; uniform_value[U_AET_BACK] = 0; uniform_value[U_LIGHT_PROJ] = 0; //uniform_value[U25] = 0; @@ -175,6 +190,78 @@ void post_process_tone_map::apply(RenderTexture* in_tex, texture* light_proj_tex gl_state_end_event(); } +bool post_process_tone_map::get_auto_exposure() { + return auto_exposure; +} + +float_t post_process_tone_map::get_exposure() { + return exposure; +} + +float_t post_process_tone_map::get_exposure_rate() { + return exposure_rate; +} + +float_t post_process_tone_map::get_gamma() { + return gamma; +} + +float_t post_process_tone_map::get_gamma_rate() { + return gamma_rate; +} + +vec3 post_process_tone_map::get_lens() { + vec3 value; + value.x = lens_flare; + value.y = lens_shaft; + value.z = lens_ghost; + return value; +} + +float_t post_process_tone_map::get_lens_flare_appear_power() { + return lens_flare_appear_power; +} + +float_t post_process_tone_map::get_lens_flare_power() { + return lens_flare_power; +} + +float_t post_process_tone_map::get_saturate_coeff() { + return saturate_coeff[0]; +} + +int32_t post_process_tone_map::get_saturate_power() { + return saturate_power; +} + +vec4 post_process_tone_map::get_scene_fade() { + vec4 scene_fade; + *(vec3*)&scene_fade = scene_fade_color[0]; + scene_fade.w = scene_fade_alpha[0]; + return scene_fade; +} + +float_t post_process_tone_map::get_scene_fade_alpha() { + return scene_fade_alpha[0]; +} + +int32_t post_process_tone_map::get_scene_fade_blend_func() { + return scene_fade_blend_func[0]; +} + +vec3 post_process_tone_map::get_scene_fade_color() { + return scene_fade_color[0]; +} + +::tone_map_method post_process_tone_map::get_tone_map_method() { + return tone_map_method; +} + +void post_process_tone_map::get_tone_trans(vec3& start, vec3& end) { + start = tone_trans_start[0]; + end = tone_trans_end[0]; +} + void post_process_tone_map::init_fbo() { if (!this) return; @@ -209,282 +296,178 @@ void post_process_tone_map::init_fbo() { } } -void post_process_tone_map::initialize_data(float_t exposure, bool auto_exposure, - float_t gamma, int32_t saturate_power, float_t saturate_coeff, - const vec3& scene_fade_color, float_t scene_fade_alpha, int32_t scene_fade_blend_func, - const vec3& tone_trans_start, const vec3& tone_trans_end, tone_map_method tone_map_method) { - initialize_data(exposure, auto_exposure, 1.0f, gamma, saturate_power, saturate_coeff, - scene_fade_color, scene_fade_alpha, scene_fade_blend_func, - tone_trans_start, tone_trans_end, tone_map_method); +void post_process_tone_map::reset_saturate_coeff(int32_t index, bool lock) { + set_saturate_coeff(1.0f, index, lock); + + if (index == 1) + saturate_index = 0; } -void post_process_tone_map::initialize_data(float_t exposure, bool auto_exposure, - float_t gamma, float_t gamma_rate, int32_t saturate_power, float_t saturate_coeff, - const vec3& scene_fade_color, float_t scene_fade_alpha, int32_t scene_fade_blend_func, - const vec3& tone_trans_start, const vec3& tone_trans_end, tone_map_method tone_map_method) { - data.exposure = clamp_def(exposure, 0.0f, 4.0f); - data.auto_exposure = auto_exposure; - data.gamma = clamp_def(gamma, 0.2f, 2.2f); - data.gamma_rate = clamp_def(gamma_rate, 0.5f, 2.0f); - data.saturate_power = clamp_def(saturate_power, 1, 6); - data.saturate_coeff = clamp_def(saturate_coeff, 0.0f, 1.0f); - *(vec3*)&data.scene_fade.x = vec3::clamp(scene_fade_color, 0.0f, 1.0f); - data.scene_fade.w = clamp_def(scene_fade_alpha, 0.0f, 1.0f); - data.scene_fade_blend_func = clamp_def(scene_fade_blend_func, 0, 2); - data.tone_trans_start = vec3::clamp(tone_trans_start, 0.0f, 1.0f); - data.tone_trans_end = vec3::clamp(tone_trans_end, 0.0f, 1.0f); - data.tone_map_method = clamp_def(tone_map_method, TONE_MAP_YCC_EXPONENT, TONE_MAP_RGB_LINEAR2); - data.update_tex = false; - data.update = true; - data.update_tex = true; +void post_process_tone_map::reset_scene_fade(int32_t index) { + scene_fade_color[index] = 0.0f; + scene_fade_alpha[index] = 0.0f; + scene_fade_blend_func[index] = 0; + + if (index == 1) + scene_fade_index = 0; + update = true; } -bool post_process_tone_map::get_auto_exposure() { - return data.auto_exposure; +void post_process_tone_map::reset_tone_trans(int32_t index) { + tone_trans_scale[index] = 1.0f; + tone_trans_offset[index] = 0.0f; + tone_trans_start[index] = 0.0f; + tone_trans_end[index] = 1.0f; + + if (index == 1) + tone_trans_index = 0; + update = true; } void post_process_tone_map::set_auto_exposure(bool value) { - if (value != data.auto_exposure) { - data.auto_exposure = value; - data.update = true; - data.update_tex = true; - } -} - -float_t post_process_tone_map::get_exposure() { - return data.exposure; + auto_exposure = value; } void post_process_tone_map::set_exposure(float_t value) { - value = clamp_def(value, 0.0f, 4.0f); - if (value != data.exposure) { - data.exposure = value; - data.update = true; - data.update_tex = true; - } + exposure = value; } -float_t post_process_tone_map::get_gamma() { - return data.gamma; +void post_process_tone_map::set_exposure_rate(float_t value) { + exposure_rate = value; } void post_process_tone_map::set_gamma(float_t value) { - value = clamp_def(value, 0.2f, 2.2f); - if (value != data.gamma) { - data.gamma = value; - data.update = true; - data.update_tex = true; + if (value != gamma) { + gamma = value; + update_lut = true; } } -float_t post_process_tone_map::get_gamma_rate() { - return data.gamma_rate; -} - void post_process_tone_map::set_gamma_rate(float_t value) { - value = clamp_def(value, 0.5f, 2.0f); - if (value != data.gamma_rate) { - data.gamma_rate = value; - data.update_tex = true; + if (value != gamma_rate) { + gamma_rate = value; + update_lut = true; } } -float_t post_process_tone_map::get_lens_flare() { - return data.lens_flare; -} - -void post_process_tone_map::set_lens_flare(float_t value) { - if (value != data.lens_flare) { - data.lens_flare = value; - data.update = true; - } -} - -float_t post_process_tone_map::get_lens_flare_appear_power() { - return data.lens_flare_appear_power; +void post_process_tone_map::set_lens(vec3 value) { + lens_flare = value.x; + lens_shaft = value.y; + lens_ghost = value.z; + update = true; } void post_process_tone_map::set_lens_flare_appear_power(float_t value) { - if (value != data.lens_flare_appear_power) { - data.lens_flare_appear_power = value; - data.update = true; - } -} - -float_t post_process_tone_map::get_lens_flare_power() { - return data.lens_flare_power; + lens_flare_appear_power = value; } void post_process_tone_map::set_lens_flare_power(float_t value) { - if (value != data.lens_flare_power) { - data.lens_flare_power = value; - data.update = true; + lens_flare_power = value; +} + +void post_process_tone_map::set_saturate_coeff(float_t value, int32_t index, bool lock) { + if (saturate_lock) + return; + + saturate_coeff[index] = value; + update_lut = true; + update = true; + + if (lock) { + saturate_lock = true; + saturate_index = 0; } -} - -float_t post_process_tone_map::get_lens_ghost() { - return data.lens_ghost; -} - -void post_process_tone_map::set_lens_ghost(float_t value) { - data.lens_ghost = value; -} - -float_t post_process_tone_map::get_lens_shaft() { - return data.lens_shaft; -} - -void post_process_tone_map::set_lens_shaft(float_t value) { - value = clamp_def(value, 0.0f, 1.0f); - if (value != data.lens_shaft) { - data.lens_shaft = value; - data.update = true; - } -} - -float_t post_process_tone_map::get_saturate_coeff() { - return data.saturate_coeff; -} - -void post_process_tone_map::set_saturate_coeff(float_t value) { - value = clamp_def(value, 0.0f, 1.0f); - if (value != data.saturate_coeff) { - data.saturate_coeff = value; - data.update_tex = true; - } -} - -int32_t post_process_tone_map::get_saturate_power() { - return data.saturate_power; + else if (index == 1) + saturate_index = 1; } void post_process_tone_map::set_saturate_power(int32_t value) { - value = clamp_def(value, 1, 6); - if (value != data.saturate_power) { - data.saturate_power = value; - data.update_tex = true; + if (value != saturate_power) { + saturate_power = value; + update_lut = true; } } -vec4 post_process_tone_map::get_scene_fade() { - return data.scene_fade; +void post_process_tone_map::set_scene_fade(const vec4& value, int32_t index) { + scene_fade_color[index] = *(vec3*)&value; + scene_fade_alpha[index] = value.w; + + if (index == 1) + scene_fade_index = 1; + update = true; } -void post_process_tone_map::set_scene_fade(const vec4& value) { - vec4 temp = vec4::clamp(value, 0.0f, 1.0f); - if (temp != data.scene_fade) { - data.scene_fade = temp; - data.update = true; - } +void post_process_tone_map::set_scene_fade_alpha(float_t value, int32_t index) { + scene_fade_alpha[index] = value; + + if (index == 1) + scene_fade_index = 1; + update = true; } -float_t post_process_tone_map::get_scene_fade_alpha() { - return data.scene_fade.w; +void post_process_tone_map::set_scene_fade_blend_func(int32_t value, int32_t index) { + if (value < 0 || value > 2) + return; + + scene_fade_blend_func[index] = value; + + if (index == 1) + scene_fade_index = 1; + update = true; } -void post_process_tone_map::set_scene_fade_alpha(float_t value) { - value = clamp_def(value, 0.0f, 1.0f); - if (value != data.scene_fade.w) { - data.scene_fade.w = value; - data.update = true; - } + +void post_process_tone_map::set_scene_fade_color(const vec3& value, int32_t index) { + scene_fade_color[index] = value; + + if (index == 1) + scene_fade_index = 1; + update = true; } -int32_t post_process_tone_map::get_scene_fade_blend_func() { - return data.scene_fade_blend_func; +void post_process_tone_map::set_tone_map_method(::tone_map_method value) { + tone_map_method = value; } -void post_process_tone_map::set_scene_fade_blend_func(int32_t value) { - value = clamp_def(value, 0, 2); - if (value != data.scene_fade_blend_func) { - data.scene_fade_blend_func = value; - data.update = true; - } -} +void post_process_tone_map::set_tone_trans(const vec3& start, const vec3& end, int32_t index) { + for (int32_t i = 0; i < 3; i++) + if (fabsf((&end.x)[i] - (&start.x)[i]) < 0.0001f) { + reset_tone_trans(0); + return; + } -vec3 post_process_tone_map::get_scene_fade_color() { - return *(vec3*)&data.scene_fade; -} + tone_trans_end[index] = end; + tone_trans_start[index] = start; -void post_process_tone_map::set_scene_fade_color(const vec3& value) { - vec3 temp = vec3::clamp(value, 0.0f, 1.0f); - if (temp != *(vec3*)&data.scene_fade) { - *(vec3*)&data.scene_fade = temp; - data.update = true; - } -} + vec3 scale = vec3::rcp(end - start); + tone_trans_scale[index] = scale; + tone_trans_offset[index] = -(scale * start); -tone_map_method post_process_tone_map::get_tone_map_method() { - return data.tone_map_method; -} - -void post_process_tone_map::set_tone_map_method(tone_map_method value) { - value = clamp_def(value, TONE_MAP_YCC_EXPONENT, TONE_MAP_RGB_LINEAR2); - if (value != data.tone_map_method) { - data.tone_map_method = value; - data.update = true; - } -} - -void post_process_tone_map::get_tone_trans(vec3& start, vec3& end) { - start = get_tone_trans_start(); - end = get_tone_trans_start(); -} - -void post_process_tone_map::set_tone_trans(const vec3& start, const vec3& end) { - set_tone_trans_start(start); - set_tone_trans_end(end); -} - -vec3 post_process_tone_map::get_tone_trans_end() { - return data.tone_trans_end; -} - -void post_process_tone_map::set_tone_trans_end(const vec3& value) { - vec3 temp = vec3::clamp(value, 0.0f, 1.0f); - if (temp != data.tone_trans_end) { - data.tone_trans_end = temp; - data.update = true; - } -} - -vec3 post_process_tone_map::get_tone_trans_start() { - return data.tone_trans_start; -} - -void post_process_tone_map::set_tone_trans_start(const vec3& value) { - vec3 temp = vec3::clamp(value, 0.0f, 1.0f); - if (temp != data.tone_trans_start) { - data.tone_trans_start = temp; - data.update = true; - } + if (index == 1) + tone_trans_index = 1; + update = true; } static void post_process_tone_map_calculate_data(post_process_tone_map* tm) { - vec3 tone_trans_scale = vec3::rcp(tm->data.tone_trans_end - tm->data.tone_trans_start); - vec3 tone_trans_offset = -(tone_trans_scale * tm->data.tone_trans_start); + int32_t scene_fade_blend_func = tm->scene_fade_blend_func[tm->scene_fade_index]; post_process_tone_map_shader_data* tmshd = &tm->shader_data; - tmshd->g_exposure.x = tm->data.exposure; + tmshd->g_exposure.x = tm->exposure * tm->exposure_rate; tmshd->g_exposure.y = 0.0625f; - tmshd->g_exposure.z = tm->data.exposure * 0.5f; - tmshd->g_exposure.w = tm->data.auto_exposure ? 1.0f : 0.0f; - tmshd->g_flare_coef.x = (tm->data.lens_flare * 2.0f) - * (tm->data.lens_flare_appear_power + tm->data.lens_flare_power); - tmshd->g_flare_coef.y = tm->data.lens_shaft * 2.0f; + tmshd->g_exposure.z = tm->exposure * tm->exposure_rate * 0.5f; + tmshd->g_exposure.w = tm->auto_exposure ? 1.0f : 0.0f; + tmshd->g_flare_coef.x = (tm->lens_flare * 2.0f) * (tm->lens_flare_appear_power + tm->lens_flare_power); + tmshd->g_flare_coef.y = tm->lens_shaft * 2.0f; tmshd->g_flare_coef.z = 0.0f; tmshd->g_flare_coef.w = 0.0f; - tmshd->g_fade_color = tm->data.scene_fade; - if (tm->data.scene_fade_blend_func == 1 || tm->data.scene_fade_blend_func == 2) + *(vec3*)&tmshd->g_fade_color = tm->scene_fade_color[tm->scene_fade_index]; + tmshd->g_fade_color.w = tm->scene_fade_alpha[tm->scene_fade_index]; + if (scene_fade_blend_func == 1 || scene_fade_blend_func == 2) *(vec3*)&tmshd->g_fade_color = *(vec3*)&tmshd->g_fade_color * tmshd->g_fade_color.w; - tmshd->g_tone_scale.x = tone_trans_scale.x; - tmshd->g_tone_scale.y = tone_trans_scale.y; - tmshd->g_tone_scale.z = tone_trans_scale.z; - tmshd->g_tone_offset.x = tone_trans_offset.x; - tmshd->g_tone_offset.y = tone_trans_offset.y; - tmshd->g_tone_offset.z = tone_trans_offset.z; - tmshd->g_tone_scale.w = (float_t)tm->data.scene_fade_blend_func; - tmshd->g_tone_offset.w = tm->data.gamma > 0.0f ? 2.0f / (tm->data.gamma * 3.0f) : 0.0f; + *(vec3*)&tmshd->g_tone_scale = tm->tone_trans_scale[tm->tone_trans_index]; + *(vec3*)&tmshd->g_tone_offset = tm->tone_trans_offset[tm->tone_trans_index]; + tmshd->g_tone_scale.w = (float_t)scene_fade_blend_func; + tmshd->g_tone_offset.w = tm->gamma > 0.0f ? 2.0f / (tm->gamma * 3.0f) : 0.0f; } static void post_process_tone_map_calculate_tex(post_process_tone_map* tm) { @@ -495,11 +478,11 @@ static void post_process_tone_map_calculate_tex(post_process_tone_map* tm) { int32_t saturate_power; float_t saturate_coeff; - vec2* tex_data = tm->data.tex_data; + vec2* tex_data = tm->tex_data; float_t gamma_power, gamma, saturation; - gamma_power = tm->data.gamma * tm->data.gamma_rate * 1.5f; - saturate_power = tm->data.saturate_power; - saturate_coeff = tm->data.saturate_coeff; + gamma_power = tm->gamma * tm->gamma_rate * 1.5f; + saturate_power = tm->saturate_power; + saturate_coeff = tm->saturate_coeff[tm->saturate_index]; tex_data->x = 0.0f; tex_data->y = 0.0f; diff --git a/src/CRE/post_process/tone_map.hpp b/src/CRE/post_process/tone_map.hpp index 80f2e4fb..59987691 100644 --- a/src/CRE/post_process/tone_map.hpp +++ b/src/CRE/post_process/tone_map.hpp @@ -23,32 +23,36 @@ struct post_process_tone_map_shader_data { vec4 g_texcoord_transforms[8]; }; -struct post_process_tone_map_data { +struct post_process_tone_map { vec2 tex_data[16 * POST_PROCESS_TONE_MAP_SAT_GAMMA_SAMPLES]; + bool update_lut; + bool saturate_lock; + float_t lens_shaft_scale; + float_t lens_shaft_inv_scale; + float_t lens_flare_power; + float_t lens_flare_appear_power; + int32_t saturate_index; + int32_t scene_fade_index; + int32_t tone_trans_index; + float_t saturate_coeff[2]; + vec3 scene_fade_color[2]; + float_t scene_fade_alpha[2]; + int32_t scene_fade_blend_func[2]; + vec3 tone_trans_scale[2]; + vec3 tone_trans_offset[2]; + vec3 tone_trans_start[2]; + vec3 tone_trans_end[2]; + tone_map_method tone_map_method; float_t exposure; + float_t exposure_rate; bool auto_exposure; float_t gamma; float_t gamma_rate; int32_t saturate_power; - float_t saturate_coeff; - vec4 scene_fade; - int32_t scene_fade_blend_func; - vec3 tone_trans_start; - vec3 tone_trans_end; - tone_map_method tone_map_method; float_t lens_flare; float_t lens_shaft; float_t lens_ghost; - float_t lens_flare_power; - float_t lens_flare_appear_power; bool update; - bool update_tex; - - post_process_tone_map_data(); -}; - -struct post_process_tone_map { - post_process_tone_map_data data; post_process_tone_map_shader_data shader_data; GL::UniformBuffer tone_map_ubo; GLuint tone_map_tex; @@ -59,52 +63,40 @@ struct post_process_tone_map { void apply(RenderTexture* in_tex, texture* light_proj_tex, texture* back_2d_tex, RenderTexture* rt, RenderTexture* buf_rt,/* RenderTexture* contour_rt,*/ GLuint in_tex_0, GLuint in_tex_1, int32_t npr_param, void* pp); - void init_fbo(); - void initialize_data(float_t exposure, bool auto_exposure, - float_t gamma, int32_t saturate_power, float_t saturate_coeff, - const vec3& scene_fade_color, float_t scene_fade_alpha, int32_t scene_fade_blend_func, - const vec3& tone_trans_start, const vec3& tone_trans_end, tone_map_method tone_map_method); - void initialize_data(float_t exposure, bool auto_exposure, - float_t gamma, float_t gamma_rate, int32_t saturate_power, float_t saturate_coeff, - const vec3& scene_fade_color, float_t scene_fade_alpha, int32_t scene_fade_blend_func, - const vec3& tone_trans_start, const vec3& tone_trans_end, tone_map_method tone_map_method); - bool get_auto_exposure(); - void set_auto_exposure(bool value); float_t get_exposure(); - void set_exposure(float_t value); + float_t get_exposure_rate(); float_t get_gamma(); - void set_gamma(float_t value); float_t get_gamma_rate(); - void set_gamma_rate(float_t value); - float_t get_lens_flare(); - void set_lens_flare(float_t value); + vec3 get_lens(); float_t get_lens_flare_appear_power(); - void set_lens_flare_appear_power(float_t value); float_t get_lens_flare_power(); - void set_lens_flare_power(float_t value); - float_t get_lens_ghost(); - void set_lens_ghost(float_t value); - float_t get_lens_shaft(); - void set_lens_shaft(float_t value); float_t get_saturate_coeff(); - void set_saturate_coeff(float_t value); int32_t get_saturate_power(); - void set_saturate_power(int32_t value); vec4 get_scene_fade(); - void set_scene_fade(const vec4& value); float_t get_scene_fade_alpha(); - void set_scene_fade_alpha(float_t value); int32_t get_scene_fade_blend_func(); - void set_scene_fade_blend_func(int32_t value); vec3 get_scene_fade_color(); - void set_scene_fade_color(const vec3& value); - tone_map_method get_tone_map_method(); - void set_tone_map_method(tone_map_method value); + ::tone_map_method get_tone_map_method(); void get_tone_trans(vec3& start, vec3& end); - void set_tone_trans(const vec3& start, const vec3& end); - vec3 get_tone_trans_end(); - void set_tone_trans_end(const vec3& value); - vec3 get_tone_trans_start(); - void set_tone_trans_start(const vec3& value); + void init_fbo(); + void reset_saturate_coeff(int32_t index, bool lock); + void reset_scene_fade(int32_t index); + void reset_tone_trans(int32_t index); + void set_auto_exposure(bool value); + void set_exposure(float_t value); + void set_exposure_rate(float_t value); + void set_gamma(float_t value); + void set_gamma_rate(float_t value); + void set_lens(vec3 value); + void set_lens_flare_appear_power(float_t value); + void set_lens_flare_power(float_t value); + void set_saturate_coeff(float_t value, int32_t index, bool lock); + void set_saturate_power(int32_t value); + void set_scene_fade(const vec4& value, int32_t index); + void set_scene_fade_alpha(float_t value, int32_t index); + void set_scene_fade_blend_func(int32_t value, int32_t index); + void set_scene_fade_color(const vec3& value, int32_t index); + void set_tone_map_method(::tone_map_method value); + void set_tone_trans(const vec3& start, const vec3& end, int32_t index); }; diff --git a/src/CRE/pv_param.cpp b/src/CRE/pv_param.cpp index a90d3479..f9c88682 100644 --- a/src/CRE/pv_param.cpp +++ b/src/CRE/pv_param.cpp @@ -938,7 +938,7 @@ namespace pv_param_task { } post_process_tone_map* tone_map = rctx_ptr->post_process.tone_map; - tone_map->set_saturate_coeff(saturation); + tone_map->set_saturate_coeff(saturation, 1, false); tone_map->set_exposure(exposure * 2.0f); vec3 tone_trans_start; @@ -947,7 +947,7 @@ namespace pv_param_task { CalcToneTrans(contrast + gamma.y, tone_trans_start.y, tone_trans_end.y); CalcToneTrans(contrast + gamma.z, tone_trans_start.z, tone_trans_end.z); - tone_map->set_tone_trans(tone_trans_start, tone_trans_end); + tone_map->set_tone_trans(tone_trans_start, tone_trans_end, 1); frame += get_delta_frame(); if (frame > duration) { diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index d00e8478..2ccc23a6 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -3651,11 +3651,9 @@ void render_context::light_param_data_glow_set(light_param_glow* glow) { tone_map->set_auto_exposure(true); tone_map->set_tone_map_method(TONE_MAP_YCC_EXPONENT); - tone_map->set_saturate_coeff(1.0f); - tone_map->set_scene_fade(0.0f); - tone_map->set_scene_fade_blend_func(0); - tone_map->set_tone_trans_start(0.0f); - tone_map->set_tone_trans_end(1.0f); + tone_map->reset_saturate_coeff(0, false); + tone_map->reset_scene_fade(0); + tone_map->reset_tone_trans(0); if (glow->has_exposure) tone_map->set_exposure(glow->exposure); @@ -3667,13 +3665,10 @@ void render_context::light_param_data_glow_set(light_param_glow* glow) { tone_map->set_saturate_power(glow->saturate_power); if (glow->has_saturate_coef) - tone_map->set_saturate_coeff(glow->saturate_coef); + tone_map->set_saturate_coeff(glow->saturate_coef, 0, false); - if (glow->has_flare) { - tone_map->set_lens_flare(glow->flare.x); - tone_map->set_lens_shaft(glow->flare.y); - tone_map->set_lens_ghost(glow->flare.z); - } + if (glow->has_flare) + tone_map->set_lens(glow->flare); if (glow->has_sigma) blur->set_radius(glow->sigma); @@ -3689,12 +3684,12 @@ void render_context::light_param_data_glow_set(light_param_glow* glow) { if (glow->has_fade_color) { vec4 fade_color = glow->fade_color; - tone_map->set_scene_fade(fade_color); - tone_map->set_scene_fade_blend_func(glow->fade_color_blend_func); + tone_map->set_scene_fade(fade_color, 0); + tone_map->set_scene_fade_blend_func(glow->fade_color_blend_func, 0); } if (glow->has_tone_transform) - tone_map->set_tone_trans(glow->tone_transform_start, glow->tone_transform_end); + tone_map->set_tone_trans(glow->tone_transform_start, glow->tone_transform_end, 0); } void render_context::light_param_data_ibl_set( diff --git a/src/ReDIVA/classes/graphics/post_process.cpp b/src/ReDIVA/classes/graphics/post_process.cpp index f37054a2..d46799d5 100644 --- a/src/ReDIVA/classes/graphics/post_process.cpp +++ b/src/ReDIVA/classes/graphics/post_process.cpp @@ -71,24 +71,20 @@ void graphics_post_process_imgui(class_data* data) { ImGui::SetColumnSpace(1.0f / 4.0f); if (ImGui::TreeNode("Tone Trans")) { - vec3 tone_trans_start = tone_map->get_tone_trans_start(); + vec3 tone_trans_start; + vec3 tone_trans_end; + tone_map->get_tone_trans(tone_trans_start, tone_trans_end); ImGui::ColumnSliderVec3Button("Start", &tone_trans_start, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); - tone_map->set_tone_trans_start(tone_trans_start); - - vec3 tone_trans_end = tone_map->get_tone_trans_end(); ImGui::ColumnSliderVec3Button("End", &tone_trans_end, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); - tone_map->set_tone_trans_end(tone_trans_end); + tone_map->set_tone_trans(tone_trans_start, tone_trans_end, 0); ImGui::TreePop(); } if (ImGui::TreeNode("Scene Fade")) { - float_t scene_fade_alpha = tone_map->get_scene_fade_alpha(); - ImGui::ColumnSliderFloatButton("Alpha", &scene_fade_alpha, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); - tone_map->set_scene_fade_alpha(scene_fade_alpha); - - vec3 scene_fade_color = tone_map->get_scene_fade_color(); - ImGui::ColumnSliderVec3Button("Color", &scene_fade_color, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); - tone_map->set_scene_fade_color(scene_fade_color); + vec4 scene_fade = tone_map->get_scene_fade(); + ImGui::ColumnSliderFloatButton("Alpha", &scene_fade.w, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); + ImGui::ColumnSliderVec3Button("Color", (vec3*)&scene_fade, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); + tone_map->set_scene_fade(scene_fade, 0); const char* scene_fade_blend_func_labels[] = { "0: OVER", @@ -99,7 +95,7 @@ void graphics_post_process_imgui(class_data* data) { int32_t scene_fade_blend_func = tone_map->get_scene_fade_blend_func(); ImGui::ColumnComboBox("Blend Func", scene_fade_blend_func_labels, 3, &scene_fade_blend_func, 0, false, &data->imgui_focus); - tone_map->set_scene_fade_blend_func(scene_fade_blend_func); + tone_map->set_scene_fade_blend_func(scene_fade_blend_func, 0); ImGui::TreePop(); } @@ -129,12 +125,12 @@ void graphics_post_process_imgui(class_data* data) { tone_map->set_gamma(gamma); int32_t saturate1 = tone_map->get_saturate_power(); - ImGui::ColumnSliderIntButton("Saturate 1", &saturate1, 1, 6, "%d", 0); + ImGui::ColumnSliderIntButton("Saturate1", &saturate1, 1, 6, "%d", 0); tone_map->set_saturate_power(saturate1); float_t saturate2 = tone_map->get_saturate_coeff(); - ImGui::ColumnSliderFloatButton("Saturate 2", &saturate2, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); - tone_map->set_saturate_coeff(saturate2); + ImGui::ColumnSliderFloatButton("Saturate2", &saturate2, 0.01f, 0.0f, 1.0f, 0.1f, "%.2f", 0); + tone_map->set_saturate_coeff(saturate2, 0, false); ImGui::TreePop(); } diff --git a/src/ReDIVA/pv_game/pv_game.cpp b/src/ReDIVA/pv_game/pv_game.cpp index c396f0bd..20d0e1ab 100644 --- a/src/ReDIVA/pv_game/pv_game.cpp +++ b/src/ReDIVA/pv_game/pv_game.cpp @@ -4667,9 +4667,9 @@ bool pv_game::unload() { light_param_data_storage_data_reset(); post_process& pp = rctx_ptr->post_process; - pp.tone_map->set_saturate_coeff(1.0f); + pp.tone_map->reset_saturate_coeff(0, true); pp.dof->set_dof_pv(); - pp.tone_map->set_scene_fade(0.0f); + pp.tone_map->reset_scene_fade(0); /*if (!sub_140192E20()) post_process_set_taa(&pp, 1);*/ diff --git a/src/ReDIVA/pv_game/pv_game_pv_data.cpp b/src/ReDIVA/pv_game/pv_game_pv_data.cpp index b511abb3..cd66c01e 100644 --- a/src/ReDIVA/pv_game/pv_game_pv_data.cpp +++ b/src/ReDIVA/pv_game/pv_game_pv_data.cpp @@ -253,8 +253,8 @@ void pv_scene_fade::ctrl(float_t delta_time) { end = false; } - rctx_ptr->post_process.tone_map->set_scene_fade_color(color); - rctx_ptr->post_process.tone_map->set_scene_fade_alpha(alpha); + rctx_ptr->post_process.tone_map->set_scene_fade_color(color, 1); + rctx_ptr->post_process.tone_map->set_scene_fade_alpha(alpha, 1); if (end) reset(); @@ -1540,17 +1540,17 @@ bool pv_game_pv_data::dsc_ctrl(float_t delta_time, int64_t curr_time, end.y = (float_t)(int32_t)data[4] * 0.001f; end.z = (float_t)(int32_t)data[5] * 0.001f; - rctx_ptr->post_process.tone_map->set_tone_trans(start, end); + rctx_ptr->post_process.tone_map->set_tone_trans(start, end, 1); } break; case DSC_FT_SATURATE: { float_t saturate_coeff = (float_t)(int32_t)data[0] * 0.001f; - rctx_ptr->post_process.tone_map->set_saturate_coeff(saturate_coeff); + rctx_ptr->post_process.tone_map->set_saturate_coeff(saturate_coeff, 1, false); } break; case DSC_FT_FADE_MODE: { int32_t blend_func = (int32_t)data[0]; - rctx_ptr->post_process.tone_map->set_scene_fade_blend_func(blend_func); + rctx_ptr->post_process.tone_map->set_scene_fade_blend_func(blend_func, 1); } break; case DSC_FT_AUTO_BLINK: { chara_id = (int32_t)data[0]; @@ -2551,11 +2551,9 @@ void pv_game_pv_data::reset_camera_post_process() { cam->set_fov(32.2673416137695f); post_process* pp = &rctx_ptr->post_process; - pp->tone_map->set_scene_fade_color(0.0f); - pp->tone_map->set_scene_fade_alpha(0.0f); - pp->tone_map->set_scene_fade_alpha(0); - pp->tone_map->set_tone_trans(0.0f, 1.0f); - pp->tone_map->set_saturate_coeff(1.0f); + pp->tone_map->reset_scene_fade(1); + pp->tone_map->reset_tone_trans(1); + pp->tone_map->reset_saturate_coeff(1, 1); Shadow* shad = rctx_ptr->render_manager.shadow_ptr; if (shad) diff --git a/src/ReDIVA/x_pv_game.cpp b/src/ReDIVA/x_pv_game.cpp index a266c667..728c7a46 100644 --- a/src/ReDIVA/x_pv_game.cpp +++ b/src/ReDIVA/x_pv_game.cpp @@ -5109,9 +5109,8 @@ bool x_pv_game::Dest() { task_rob_manager_del_task(); light_param_data_storage_data_reset(); - rctx_ptr->post_process.tone_map->set_saturate_coeff(1.0f); - rctx_ptr->post_process.tone_map->set_scene_fade(0.0f); - rctx_ptr->post_process.tone_map->set_scene_fade_blend_func(0); + rctx_ptr->post_process.tone_map->reset_saturate_coeff(0, false); + rctx_ptr->post_process.tone_map->reset_scene_fade(0); rctx_ptr->post_process.dof->data.pv.enable = false; rctx_ptr->disp_manager.object_culling = true; rctx_ptr->render_manager.shadow_ptr->range = 1.0f; @@ -7001,12 +7000,12 @@ static bool x_pv_game_dsc_process(x_pv_game* a1, int64_t curr_time) { playdata = &a1->playdata[a1->chara_id]; rob_chr = playdata->rob_chr; - float_t value = (float_t)(int32_t)data[1] * 0.001f; + float_t wet = (float_t)(int32_t)data[1] * 0.001f; - if (!rob_chr) - break; + wet = clamp_def(wet, 0.0f, 1.0f); - rob_chr->item_equip->wet = clamp_def(value, 0.0f, 1.0f); + if (rob_chr) + rob_chr->item_equip->wet = wet; } break; case DSC_X_LIGHT_ROT: { @@ -7016,22 +7015,26 @@ static bool x_pv_game_dsc_process(x_pv_game* a1, int64_t curr_time) { } break; case DSC_X_TONE_TRANS: { vec3 start; - vec3 end; start.x = (float_t)(int32_t)data[0] * 0.001f; start.y = (float_t)(int32_t)data[1] * 0.001f; start.z = (float_t)(int32_t)data[2] * 0.001f; + + vec3 end; end.x = (float_t)(int32_t)data[3] * 0.001f; end.y = (float_t)(int32_t)data[4] * 0.001f; end.z = (float_t)(int32_t)data[5] * 0.001f; - rctx_ptr->post_process.tone_map->set_tone_trans(start, end); + + rctx_ptr->post_process.tone_map->set_tone_trans(start, end, 1); } break; case DSC_X_SATURATE: { - float_t value = (float_t)(int32_t)data[0] * 0.001f; - rctx_ptr->post_process.tone_map->set_saturate_coeff(value); + float_t saturate_coeff = (float_t)(int32_t)data[0] * 0.001f; + + rctx_ptr->post_process.tone_map->set_saturate_coeff(saturate_coeff, 1, false); } break; case DSC_X_FADE_MODE: { - int32_t value = data[0]; - rctx_ptr->post_process.tone_map->set_scene_fade_blend_func(value); + int32_t blend_func = data[0]; + + rctx_ptr->post_process.tone_map->set_scene_fade_blend_func(blend_func, 1); } break; case DSC_X_AUTO_BLINK: {