From da278555d2000503fd97c83a4a373c4497caae7c Mon Sep 17 00:00:00 2001 From: luboslenco Date: Wed, 20 May 2026 10:57:58 +0200 Subject: [PATCH] paint: raytrace fixes --- paint/sources/history.c | 6 ++++-- paint/sources/make_material.c | 4 +--- paint/sources/render_path_raytrace.c | 3 ++- paint/sources/types.h | 7 ++++--- paint/sources/util_layer.c | 5 +---- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/paint/sources/history.c b/paint/sources/history.c index 99dcbc72..446ab9a0 100644 --- a/paint/sources/history.c +++ b/paint/sources/history.c @@ -313,7 +313,8 @@ void history_undo() { history_undos--; history_redos++; - g_context->ddirty = 2; + g_context->rtdirty = 1; + g_context->ddirty = 2; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1]->redraws = 2; @@ -593,7 +594,8 @@ void history_redo() { history_undos++; history_redos--; - g_context->ddirty = 2; + g_context->rtdirty = 1; + g_context->ddirty = 2; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1]->redraws = 2; diff --git a/paint/sources/make_material.c b/paint/sources/make_material.c index dacea428..d8c8f9bc 100644 --- a/paint/sources/make_material.c +++ b/paint/sources/make_material.c @@ -86,9 +86,7 @@ void make_material_parse_mesh_material() { } g_context->ddirty = 2; - if (g_context->viewport_mode == VIEWPORT_MODE_PATH_TRACE) { - g_context->pdirty = 1; - } + g_context->rtdirty = 1; if (make_material_transluc_used) { make_material_parse_depth_material(); diff --git a/paint/sources/render_path_raytrace.c b/paint/sources/render_path_raytrace.c index 4d0aad7a..270da4f7 100644 --- a/paint/sources/render_path_raytrace.c +++ b/paint/sources/render_path_raytrace.c @@ -48,8 +48,9 @@ void render_path_raytrace_commands(bool use_live_layer) { } //// - if (g_context->pdirty > 0) { + if (g_context->pdirty > 0 || g_context->rtdirty > 0) { layers_flatten(true, NULL); + g_context->rtdirty = 0; } camera_object_t *cam = scene_camera; diff --git a/paint/sources/types.h b/paint/sources/types.h index 8301f95e..a7d1d919 100644 --- a/paint/sources/types.h +++ b/paint/sources/types.h @@ -178,9 +178,10 @@ typedef struct context { struct mesh_object *paint_object; struct mesh_object *merged_object; bool merged_object_is_atlas; - i32 ddirty; - i32 pdirty; - i32 rdirty; + i32 ddirty; // depth + i32 pdirty; // paint + i32 rdirty; // render + i32 rtdirty; // raytrace bool brush_blend_dirty; bool split_view; i32 view_index; diff --git a/paint/sources/util_layer.c b/paint/sources/util_layer.c index a1fedee3..68dcd5d4 100644 --- a/paint/sources/util_layer.c +++ b/paint/sources/util_layer.c @@ -297,11 +297,8 @@ static void path_repaint(slot_layer_t *l) { camera_object_build_mat(scene_camera); render_path_base_draw_gbuffer(); - if (g_context->viewport_mode == VIEWPORT_MODE_PATH_TRACE) { - layers_flatten(true, NULL); - } - g_context->pdirty = 0; + g_context->rtdirty = 1; g_context->rdirty = 2; g_context->tool = _tool; g_context->layer = _layer;