paint: use parent blending for layer filter

This commit is contained in:
luboslenco
2026-05-21 09:37:08 +02:00
parent 797b93224f
commit fc9414fd29
5 changed files with 14 additions and 9 deletions
+1 -1
View File
@@ -244,7 +244,7 @@ void export_texture_run_layers(char *path, slot_layer_t_array_t *layers, char *o
gpu_set_texture(pipes_texa, layers_temp_image);
gpu_set_float(pipes_opac, slot_layer_get_opacity(l1));
gpu_set_float(pipes_tex1w, empty->width);
gpu_set_int(pipes_blending, layers->length > 1 ? l1->blending : 0);
gpu_set_int(pipes_blending, layers->length > 1 ? slot_layer_get_blending(l1) : 0);
gpu_set_vertex_buffer(const_data_screen_aligned_vb);
gpu_set_index_buffer(const_data_screen_aligned_ib);
gpu_draw();
+1
View File
@@ -37,6 +37,7 @@ bool slot_layer_has_masks(slot_layer_t *raw, bool include_group
slot_layer_t_array_t *slot_layer_get_filters(slot_layer_t *raw, bool include_group_filters);
f32 slot_layer_get_opacity(slot_layer_t *raw);
i32 slot_layer_get_object_mask(slot_layer_t *raw);
i32 slot_layer_get_blending(slot_layer_t *raw);
bool slot_layer_is_layer(slot_layer_t *raw);
bool slot_layer_is_path(slot_layer_t *raw);
bool slot_layer_is_group(slot_layer_t *raw);
+1 -1
View File
@@ -372,7 +372,7 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) {
}
else {
node_shader_write_frag(kong, string("basecol = %s;",
make_material_blend_mode(kong, l->blending, "basecol", "texpaint_sample.rgb", "texpaint_opac")));
make_material_blend_mode(kong, slot_layer_get_blending(l), "basecol", "texpaint_sample.rgb", "texpaint_opac")));
}
}
+7 -3
View File
@@ -617,7 +617,11 @@ f32 slot_layer_get_opacity(slot_layer_t *raw) {
}
i32 slot_layer_get_object_mask(slot_layer_t *raw) {
return slot_layer_is_mask(raw) ? raw->parent->object_mask : raw->object_mask;
return (slot_layer_is_mask(raw) || slot_layer_is_filter(raw)) ? raw->parent->object_mask : raw->object_mask;
}
i32 slot_layer_get_blending(slot_layer_t *raw) {
return slot_layer_is_filter(raw) ? raw->parent->blending : raw->blending;
}
bool slot_layer_is_layer(slot_layer_t *raw) {
@@ -1735,7 +1739,7 @@ void layers_merge_layer(slot_layer_t *l0, slot_layer_t *l1, bool use_mask) {
gpu_set_texture(pipes_texa, layers_temp_image);
gpu_set_float(pipes_opac, slot_layer_get_opacity(l1));
gpu_set_float(pipes_tex1w, empty->width);
gpu_set_int(pipes_blending, l1->blending);
gpu_set_int(pipes_blending, slot_layer_get_blending(l1));
gpu_set_vertex_buffer(const_data_screen_aligned_vb);
gpu_set_index_buffer(const_data_screen_aligned_ib);
gpu_draw();
@@ -1861,7 +1865,7 @@ slot_layer_t *layers_flatten(bool height_to_normal, slot_layer_t_array_t *layers
gpu_set_texture(pipes_texa, layers_temp_image);
gpu_set_float(pipes_opac, slot_layer_get_opacity(l1));
gpu_set_float(pipes_tex1w, empty->width);
gpu_set_int(pipes_blending, layers->length > 1 ? l1->blending : 0);
gpu_set_int(pipes_blending, layers->length > 1 ? slot_layer_get_blending(l1) : 0);
gpu_set_vertex_buffer(const_data_screen_aligned_vb);
gpu_set_index_buffer(const_data_screen_aligned_ib);
gpu_draw();
+4 -4
View File
@@ -447,7 +447,7 @@ void tab_layers_draw_layer_slot_full(slot_layer_t *l, i32 i) {
}
// Blending combo
if (!slot_layer_is_group(l) && !slot_layer_is_mask(l)) {
if (!slot_layer_is_group(l) && !slot_layer_is_mask(l) && !slot_layer_is_filter(l)) {
ui->_x = uix + uiw * 0.60;
ui->_y = uiy;
ui->_w = uiw * 0.30;
@@ -455,7 +455,7 @@ void tab_layers_draw_layer_slot_full(slot_layer_t *l, i32 i) {
}
// Object combo
if (!slot_layer_is_group(l) && !slot_layer_is_mask(l)) {
if (!slot_layer_is_group(l) && !slot_layer_is_mask(l) && !slot_layer_is_filter(l)) {
ui->_x = uix + uiw * 0.60;
ui->_y = uiy + center * 2;
ui->_w = uiw * 0.30;
@@ -638,12 +638,12 @@ void tab_layers_draw_layer_context_menu_draw() {
ui_menu_keep_open = true;
}
if (!slot_layer_is_group(l) && !slot_layer_is_mask(l)) {
if (!slot_layer_is_group(l) && !slot_layer_is_mask(l) && !slot_layer_is_filter(l)) {
if (tab_layers_combo_blending(l, true)->changed) {
ui_menu_keep_open = true;
}
}
if (slot_layer_is_layer(l)) {
if (slot_layer_is_layer(l) && !slot_layer_is_filter(l)) {
if (tab_layers_combo_object(l, true)->changed) {
ui_menu_keep_open = true;
}