paint: separate sculpt layers stack
This commit is contained in:
@@ -410,6 +410,7 @@ void base_render(void *_) {
|
||||
util_render_make_material_preview();
|
||||
ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1]->redraws = 2;
|
||||
base_init_undo_layers();
|
||||
|
||||
make_material_parse_mesh_material();
|
||||
make_material_parse_paint_material(true);
|
||||
g_context->ddirty = 0;
|
||||
@@ -2353,6 +2354,13 @@ void base_update_workspace() {
|
||||
base_resize();
|
||||
}
|
||||
|
||||
void base_update_workflow_create_sculpt_layer(void *_) {
|
||||
if (history_undo_layers != NULL) {
|
||||
sculpt_layers_create_sculpt_layer();
|
||||
sys_remove_update(base_update_workflow_create_sculpt_layer);
|
||||
}
|
||||
}
|
||||
|
||||
void base_update_workflow() {
|
||||
// Update Material Output nodes
|
||||
for (i32 i = 0; i < project_materials->length; ++i) {
|
||||
@@ -2364,6 +2372,32 @@ void base_update_workflow() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (g_config->workflow == WORKFLOW_SCULPT) {
|
||||
slot_layer_t *first_sculpt = NULL;
|
||||
for (i32 i = project_layers->length - 1; i >= 0; --i) {
|
||||
if (project_layers->buffer[i]->texpaint_sculpt != NULL) {
|
||||
first_sculpt = project_layers->buffer[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (first_sculpt == NULL) {
|
||||
sys_remove_update(base_update_workflow_create_sculpt_layer);
|
||||
sys_notify_on_update(base_update_workflow_create_sculpt_layer, NULL);
|
||||
}
|
||||
else {
|
||||
context_set_layer(first_sculpt);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i32 i = project_layers->length - 1; i >= 0; --i) {
|
||||
slot_layer_t *l = project_layers->buffer[i];
|
||||
if (l->texpaint_sculpt == NULL && slot_layer_is_layer(l)) {
|
||||
context_set_layer(l);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void base_run_in_player() {
|
||||
|
||||
@@ -213,7 +213,7 @@ node_shader_context_t *sculpt_make_sculpt_run(material_t *data, material_context
|
||||
|
||||
void sculpt_make_mesh_run(node_shader_t *kong, slot_layer_t *l) {
|
||||
node_shader_add_constant(kong, "WVP: float4x4", "_world_view_proj_matrix");
|
||||
i32 lid = l->id;
|
||||
i32 lid = array_index_of(project_layers, l);
|
||||
node_shader_add_texture(kong, "texpaint_sculpt", string("_texpaint_sculpt%s", i32_to_string(lid)));
|
||||
node_shader_add_constant(kong, "texpaint_sculpt_size: float2", string("_size(_texpaint_sculpt%s)", i32_to_string(lid)));
|
||||
// node_shader_write_vert(kong, "var meshpos: float3 = sample_lod(texpaint_sculpt, sampler_linear, uint2(vertex_id() % constants.texpaint_sculpt_size.x,
|
||||
@@ -337,8 +337,9 @@ void sculpt_init() {
|
||||
}
|
||||
|
||||
void sculpt_layers_create_sculpt_layer() {
|
||||
slot_layer_t *l = layers_new_layer(true, -1, NULL);
|
||||
mesh_data_t *md = g_context->paint_object->data;
|
||||
slot_layer_t *l = layers_new_layer(true, -1, NULL);
|
||||
l->name = string("Sculpt %d", l->id + 1);
|
||||
mesh_data_t *md = g_context->paint_object->data;
|
||||
sculpt_init_sculpt_texture(l, md);
|
||||
sculpt_init();
|
||||
}
|
||||
|
||||
@@ -914,6 +914,14 @@ void tab_layers_draw_layer_slot(slot_layer_t *l, i32 i, bool mini) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool is_sculpt_layer = l->texpaint_sculpt != NULL;
|
||||
if (g_config->workflow == WORKFLOW_SCULPT && !is_sculpt_layer) {
|
||||
return;
|
||||
}
|
||||
if (g_config->workflow != WORKFLOW_SCULPT && is_sculpt_layer) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (l->parent != NULL && !l->parent->show_panel) { // Group closed
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user