From f93a46e7c8e4edc45403629772bf4fd72082feb1 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 15 Jun 2026 11:09:01 +0200 Subject: [PATCH] paint: masking fixes --- paint/shaders/layer_view.kong | 6 +++--- paint/sources/nodes_neural/inpaint_image_node.c | 16 +++++++++++++++- paint/sources/nodes_neural/outpaint_image_node.c | 6 ------ paint/sources/nodes_neural/upscale_image_node.c | 4 ---- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/paint/shaders/layer_view.kong b/paint/shaders/layer_view.kong index 53bb02e6..11ffba92 100644 --- a/paint/shaders/layer_view.kong +++ b/paint/shaders/layer_view.kong @@ -50,10 +50,10 @@ fun layer_view_frag(input: vert_out): float4 { if (constants.channel == 6) { // Apply mask as red area var tex_sample: float4 = sample_lod(tex, sampler_linear, input.tex, 0.0); - if (tex_sample.r < 0.9) { - discard; + if (tex_sample.r < 0.9 || tex_sample.g < 0.9 || tex_sample.b < 0.9) { + return float4(1.0, 0.0, 0.0, 1.0); } - return float4(1.0, 0.0, 0.0, 1.0); + discard; } // else { var tex_sample: float4 = sample_lod(tex, sampler_linear, input.tex, 0.0); diff --git a/paint/sources/nodes_neural/inpaint_image_node.c b/paint/sources/nodes_neural/inpaint_image_node.c index ad6c23be..a6117156 100644 --- a/paint/sources/nodes_neural/inpaint_image_node.c +++ b/paint/sources/nodes_neural/inpaint_image_node.c @@ -25,7 +25,21 @@ void inpaint_image_node_button_on_next_frame(ui_node_t *node) { buffer_t *input_buf = gpu_get_texture_pixels(input); #endif iron_write_png(string("%s%sinput.png", dir, PATH_SEP), input_buf, input->width, input->height, 0); - iron_write_png(string("%s%smask.png", dir, PATH_SEP), gpu_get_texture_pixels(mask), mask->width, mask->height, 0); + + buffer_t *mask_buf = gpu_get_texture_pixels(mask); + for (uint32_t i = 0; i < mask_buf->length / 4; ++i) { + if (mask_buf->buffer[i * 4] + mask_buf->buffer[i * 4 + 1] + mask_buf->buffer[i * 4 + 2] > 200) { + mask_buf->buffer[i * 4] = 0; + mask_buf->buffer[i * 4 + 1] = 0; + mask_buf->buffer[i * 4 + 2] = 0; + } + else { + mask_buf->buffer[i * 4] = 255; + mask_buf->buffer[i * 4 + 1] = 255; + mask_buf->buffer[i * 4 + 2] = 255; + } + } + iron_write_png(string("%s%smask.png", dir, PATH_SEP), mask_buf, mask->width, mask->height, 0); } else { gpu_texture_t *masked = gpu_create_render_target(512, 512, GPU_TEXTURE_FORMAT_RGBA32); diff --git a/paint/sources/nodes_neural/outpaint_image_node.c b/paint/sources/nodes_neural/outpaint_image_node.c index 1e7f02b6..c89e0500 100644 --- a/paint/sources/nodes_neural/outpaint_image_node.c +++ b/paint/sources/nodes_neural/outpaint_image_node.c @@ -26,12 +26,6 @@ void outpaint_image_node_button_on_next_frame(ui_node_t *node) { draw_scaled_image(input, 64, 64, 512 - 128, 512 - 128); draw_end(); - // #ifdef IRON_BGRA - // let input_buf: buffer_t = buffer_bgra_swap(gpu_get_texture_pixels(input)); // Vulkan non-rt textures need a flip - // #else - // let input_buf: buffer_t = gpu_get_texture_pixels(input); - // #endif - char *dir = neural_node_dir(); iron_write_png(string("%s%sinput.png", dir, PATH_SEP), gpu_get_texture_pixels(input_scaled), input_scaled->width, input_scaled->height, 0); iron_write_png(string("%s%smask.png", dir, PATH_SEP), gpu_get_texture_pixels(mask), mask->width, mask->height, 0); diff --git a/paint/sources/nodes_neural/upscale_image_node.c b/paint/sources/nodes_neural/upscale_image_node.c index 29ae98c2..b32b4c34 100644 --- a/paint/sources/nodes_neural/upscale_image_node.c +++ b/paint/sources/nodes_neural/upscale_image_node.c @@ -16,11 +16,7 @@ void upscale_image_node_button(i32 node_id) { ui_node_t *from_node = neural_from_node(node->inputs->buffer[0], 0); gpu_texture_t *input = ui_nodes_get_node_preview_image(from_node); if (input != NULL) { -#ifdef IRON_BGRA - buffer_t *input_buf = buffer_bgra_swap(gpu_get_texture_pixels(input)); // Vulkan non-rt textures need a flip -#else buffer_t *input_buf = gpu_get_texture_pixels(input); -#endif char *dir = neural_node_dir(); iron_write_png(string("%s%sinput.png", dir, PATH_SEP), input_buf, input->width, input->height, 0);