paint: masking fixes

This commit is contained in:
luboslenco
2026-06-15 11:09:01 +02:00
parent 22ac70a9ff
commit f93a46e7c8
4 changed files with 18 additions and 14 deletions
+3 -3
View File
@@ -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);
@@ -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);
@@ -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);
@@ -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);