From dc49613f9218ff6b8f58e8339e3d75b148fa387b Mon Sep 17 00:00:00 2001 From: korenkonder Date: Thu, 29 May 2025 21:17:11 +0300 Subject: [PATCH] Fixed NPR not applying properly --- src/DivaGL/render_context.cpp | 6 ++++++ src/DivaGL/render_context.hpp | 1 + src/DivaGL/render_manager.cpp | 6 +++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp index 0889e12..a51065d 100644 --- a/src/DivaGL/render_context.cpp +++ b/src/DivaGL/render_context.cpp @@ -612,6 +612,12 @@ void render_data_context::set_glitter_render_data_state() { state.bind_uniform_buffer_base(1, data.buffer_scene); } +void render_data_context::set_npr(rndr::RenderManager* render_manager) { + shader_flags.arr[U_NPR] = 0; + if (render_manager->npr_param == 1) + shader_flags.arr[U_NPR] = 1; +} + void render_data_context::set_render_data_state() { data.set_state(state); } diff --git a/src/DivaGL/render_context.hpp b/src/DivaGL/render_context.hpp index 43fddd5..beeabf8 100644 --- a/src/DivaGL/render_context.hpp +++ b/src/DivaGL/render_context.hpp @@ -452,6 +452,7 @@ struct render_data_context { void set_batch_texcoord_transforms(const mat4 mats[2]); void set_batch_worlds(const mat4& mat); void set_glitter_render_data_state(); + void set_npr(rndr::RenderManager* render_manager); void set_render_data_state(); void set_scene_fog_params(const render_data_context::fog_params& value); void set_scene_framebuffer_size(const int32_t width, const int32_t height, diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index ca14f2d..76d5fa1 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -583,6 +583,7 @@ namespace rndr { } draw_pass_sss_filter(rend_data_ctx, sss); + rend_data_ctx.set_npr(this); reflect_draw = false; rend_data_ctx.state.end_event(); } @@ -669,6 +670,7 @@ namespace rndr { } draw_pass_sss_filter(rend_data_ctx, sss); + rend_data_ctx.set_npr(this); rend_data_ctx.state.bind_framebuffer(0); rend_data_ctx.state.end_event(); } @@ -918,6 +920,8 @@ namespace rndr { sss_data_get()->set_texture(rend_data_ctx.state, 1); + rend_data_ctx.set_npr(this); + rend_data_ctx.state.bind_sampler(14, rctx->render_samplers[0]); rend_data_ctx.state.bind_sampler(15, rctx->render_samplers[0]); rend_data_ctx.state.bind_sampler(16, rctx->render_samplers[0]); @@ -2437,7 +2441,7 @@ static void lighting_set(render_data_context& rend_data_ctx, light_set_id set_id float_t* (FASTCALL * face_data_get)() = (float_t * (FASTCALL*)())0x00000001403D8310; float_t v27 = face_data_get()[0]; - float_t v28 = (float_t)(1.0 - exp(v27 * -0.44999999)) * 2.0f; + float_t v28 = (1.0f - expf(v27 * -0.45f)) * 2.0f; v27 = max_def(v27, 0.0f); vec4 light_face_diff = { v28 * 0.1f, v27 * 0.06f, 1.0f, 1.0f };