diff --git a/paint/sources/export_texture.c b/paint/sources/export_texture.c index 185d5eac..9176e753 100644 --- a/paint/sources/export_texture.c +++ b/paint/sources/export_texture.c @@ -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(); diff --git a/paint/sources/functions.h b/paint/sources/functions.h index 71a9f3bb..2a7eeccd 100644 --- a/paint/sources/functions.h +++ b/paint/sources/functions.h @@ -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); diff --git a/paint/sources/make_mesh.c b/paint/sources/make_mesh.c index f590de4e..224e1ee9 100644 --- a/paint/sources/make_mesh.c +++ b/paint/sources/make_mesh.c @@ -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"))); } } diff --git a/paint/sources/slot_layer.c b/paint/sources/slot_layer.c index da26f629..dd4c4cbc 100644 --- a/paint/sources/slot_layer.c +++ b/paint/sources/slot_layer.c @@ -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(); diff --git a/paint/sources/tab_layers.c b/paint/sources/tab_layers.c index 71ae58bd..68c8e9e6 100644 --- a/paint/sources/tab_layers.c +++ b/paint/sources/tab_layers.c @@ -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; }