diff --git a/paint/sources/export_texture.c b/paint/sources/export_texture.c index 549e0eb8..05961345 100644 --- a/paint/sources/export_texture.c +++ b/paint/sources/export_texture.c @@ -202,6 +202,9 @@ void export_texture_run_layers(char *path, slot_layer_t_array_t *layers, char *o if (!slot_layer_is_layer(l1)) { continue; } + if (slot_layer_get_filters(l1, false) != NULL) { + continue; + } if (!string_equals(object_name, "") && slot_layer_get_object_mask(l1) > 0) { if (is_udim && !ends_with(project_paint_objects->buffer[slot_layer_get_object_mask(l1) - 1]->base->name, object_name)) { diff --git a/paint/sources/make_mesh.c b/paint/sources/make_mesh.c index e122ed56..1e07a64a 100644 --- a/paint/sources/make_mesh.c +++ b/paint/sources/make_mesh.c @@ -261,12 +261,13 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { if (is_material_tool && l != g_context->layer) { continue; } - if (!slot_layer_is_layer(l) || !slot_layer_is_visible(l)) { + if (!slot_layer_is_visible(l)) { continue; } - - slot_layer_t_array_t *filters = slot_layer_get_filters(l, true); - if (filters != NULL) { + if (!slot_layer_is_layer(l)) { + continue; + } + if (slot_layer_get_filters(l, false) != NULL) { continue; } diff --git a/paint/sources/slot_layer.c b/paint/sources/slot_layer.c index f0b02b4c..4f2e471c 100644 --- a/paint/sources/slot_layer.c +++ b/paint/sources/slot_layer.c @@ -1694,6 +1694,9 @@ slot_layer_t *layers_flatten(bool height_to_normal, slot_layer_t_array_t *layers if (!slot_layer_is_layer(l1)) { continue; } + if (slot_layer_get_filters(l1, false) != NULL) { + continue; + } gpu_texture_t *mask = empty; slot_layer_t_array_t *l1masks = slot_layer_get_masks(l1, true); diff --git a/paint/sources/tab_layers.c b/paint/sources/tab_layers.c index 32623ba0..6d3c3f0b 100644 --- a/paint/sources/tab_layers.c +++ b/paint/sources/tab_layers.c @@ -512,6 +512,14 @@ void tab_layers_draw_layer_context_menu_delete(void *_) { void tab_layers_draw_layer_context_menu_to_paint_layer(void *_) { slot_layer_t *l = tab_layers_l; + + if (slot_layer_is_filter(l)) { + i32 pi = array_index_of(project_layers, l->parent); + array_remove(project_layers, l); + array_insert(project_layers, pi, l); + l->parent = NULL; + } + slot_layer_is_layer(l) ? history_to_paint_layer() : history_to_paint_mask(); slot_layer_to_paint_layer(l); } @@ -1017,7 +1025,12 @@ void tab_layers_button_new_menu() { } l = g_context->layer; - slot_layer_t *m = layers_new_mask(false, l, -1); + i32_map_t *pointers = tab_layers_init_layer_map(); + slot_layer_t *m = layers_new_mask(false, l, -1); + for (i32 i = 0; i < project_materials->length; ++i) { + slot_material_t *mat = project_materials->buffer[i]; + tab_layers_remap_layer_pointers(mat->canvas->nodes, tab_layers_fill_layer_map(pointers)); + } sys_notify_on_next_frame(&tab_layers_button_new_black_mask, m); g_context->layer_preview_dirty = true; history_new_black_mask(); @@ -1029,7 +1042,12 @@ void tab_layers_button_new_menu() { } l = g_context->layer; - slot_layer_t *m = layers_new_mask(false, l, -1); + i32_map_t *pointers = tab_layers_init_layer_map(); + slot_layer_t *m = layers_new_mask(false, l, -1); + for (i32 i = 0; i < project_materials->length; ++i) { + slot_material_t *mat = project_materials->buffer[i]; + tab_layers_remap_layer_pointers(mat->canvas->nodes, tab_layers_fill_layer_map(pointers)); + } sys_notify_on_next_frame(&tab_layers_button_new_layer_clear, m); g_context->layer_preview_dirty = true; history_new_white_mask(); @@ -1041,7 +1059,12 @@ void tab_layers_button_new_menu() { } l = g_context->layer; - slot_layer_t *m = layers_new_mask(false, l, -1); + i32_map_t *pointers = tab_layers_init_layer_map(); + slot_layer_t *m = layers_new_mask(false, l, -1); + for (i32 i = 0; i < project_materials->length; ++i) { + slot_material_t *mat = project_materials->buffer[i]; + tab_layers_remap_layer_pointers(mat->canvas->nodes, tab_layers_fill_layer_map(pointers)); + } sys_notify_on_next_frame(&tab_layers_button_new_to_fill_layer, m); g_context->layer_preview_dirty = true; history_new_fill_mask();