diff --git a/paint/sources/base.c b/paint/sources/base.c index 49043b28..0f9f5b2b 100644 --- a/paint/sources/base.c +++ b/paint/sources/base.c @@ -59,6 +59,7 @@ void base_on_drop_files(char *drop_path) { void base_init_on_start_arm(void *_) { import_arm_run_project(project_filepath); + g_context->tool = TOOL_TYPE_CURSOR; // Auto-run script if (g_project->script_datas != NULL && g_project->script_datas->length > 0) { minic_ctx_t *ctx = minic_eval(g_project->script_datas->buffer[0]); @@ -390,12 +391,6 @@ void base_init_undo_layers() { } void base_render(void *_) { - if (g_context->frame == 2) { - util_render_make_material_preview(); - ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1]->redraws = 2; - - base_init_undo_layers(); - } if (g_context->tool == TOOL_TYPE_CURSOR) { sim_init(); @@ -403,11 +398,12 @@ void base_render(void *_) { } if (g_context->frame == 2) { + 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; - g_context->camera_pivot = g_config->camera_pivot; - g_context->camera_controls = g_config->camera_controls; } else if (g_context->frame == 3) { g_context->ddirty = 3; @@ -648,44 +644,8 @@ void ui_base_menu_draw_viewport_mode() { mode_handle->i = g_context->viewport_mode; ui_text(tr("Viewport Mode"), UI_ALIGN_RIGHT, 0x00000000); - string_array_t *modes = any_array_create_from_raw( - (void *[]){ - tr("Lit"), - tr("Base Color"), - tr("Normal"), - tr("Occlusion"), - tr("Roughness"), - tr("Metallic"), - tr("Opacity"), - tr("Height"), - tr("Emission"), - tr("Subsurface"), - tr("TexCoord"), - tr("Object Normal"), - tr("Material ID"), - tr("Object ID"), - tr("Mask"), - }, - 15); - string_array_t *shortcuts = any_array_create_from_raw( - (void *[]){ - "l", - "b", - "n", - "o", - "r", - "m", - "a", - "h", - "e", - "s", - "t", - "1", - "2", - "3", - "4", - }, - 15); + string_array_t *modes = base_get_viewport_modes(); + string_array_t *shortcuts = base_get_viewport_mode_shortcuts(); if (gpu_raytrace_supported()) { any_array_push(modes, tr("Path Traced")); any_array_push(shortcuts, "p"); @@ -1752,6 +1712,9 @@ void base_init() { base_update_workflow(); } + g_context->camera_pivot = g_config->camera_pivot; + g_context->camera_controls = g_config->camera_controls; + bool has_projects = g_config->recent_projects->length > 0; if (g_config->splash_screen && has_projects) { box_projects_show(); @@ -1768,7 +1731,6 @@ void base_init() { if (args_player) { sys_notify_on_next_frame(&base_init_on_start_arm, NULL); - g_context->tool = TOOL_TYPE_CURSOR; make_material_parse_paint_material(true); g_config->workspace = WORKSPACE_PLAYER; base_update_workspace(); @@ -2357,3 +2319,59 @@ uint32_t base_darker(uint32_t x, uint32_t y) { b = b > by ? b - by : 0; return (x & 0xff000000) | (r << 16) | (g << 8) | b; } + +string_array_t *base_get_viewport_modes() { + string_array_t *modes = any_array_create_from_raw( + (void *[]){ + tr("Lit"), + tr("Base Color"), + tr("Normal"), + tr("Occlusion"), + tr("Roughness"), + tr("Metallic"), + tr("Opacity"), + tr("Height"), + tr("Emission"), + tr("Subsurface"), + tr("TexCoord"), + tr("Object Normal"), + tr("Material ID"), + tr("Object ID"), + tr("Mask"), + }, + 15); + + if (gpu_raytrace_supported()) { + any_array_push(modes, tr("Path Traced")); + } + + return modes; +} + +string_array_t *base_get_viewport_mode_shortcuts() { + string_array_t *shortcuts = any_array_create_from_raw( + (void *[]){ + "l", + "b", + "n", + "o", + "r", + "m", + "a", + "h", + "e", + "s", + "t", + "1", + "2", + "3", + "4", + }, + 15); + + if (gpu_raytrace_supported()) { + any_array_push(shortcuts, "p"); + } + + return shortcuts; +} diff --git a/paint/sources/box_preferences.c b/paint/sources/box_preferences.c index bdb052d3..482e4183 100644 --- a/paint/sources/box_preferences.c +++ b/paint/sources/box_preferences.c @@ -607,12 +607,7 @@ void box_preferences_pen_tab() { void box_preferences_viewport_tab() { ui_handle_t *h_mode = ui_handle(__ID__); h_mode->i = g_config->viewport_mode; - string_array_t *mode_combo = any_array_create_from_raw( - (void *[]){ - tr("Lit"), - tr("Path Traced"), - }, - 2); + string_array_t *mode_combo = base_get_viewport_modes(); ui_combo(h_mode, mode_combo, tr("Default Mode"), true, UI_ALIGN_LEFT, true); if (h_mode->changed) { g_config->viewport_mode = h_mode->i; diff --git a/paint/sources/context.c b/paint/sources/context.c index 68cd0266..729ccd29 100644 --- a/paint/sources/context.c +++ b/paint/sources/context.c @@ -26,7 +26,7 @@ context_t *context_create() { c->layers_destination = EXPORT_DESTINATION_DISK; c->split_by = SPLIT_TYPE_OBJECT; c->select_time = 0.0; - c->viewport_mode = g_config->viewport_mode == 0 ? VIEWPORT_MODE_LIT : VIEWPORT_MODE_PATH_TRACE; + c->viewport_mode = g_config->viewport_mode; c->hscale_was_changed = false; c->export_mesh_format = MESH_FORMAT_OBJ; c->export_mesh_index = 0; @@ -285,7 +285,7 @@ void context_select_tool(i32 i) { make_material_parse_mesh_material(); g_context->ddirty = 3; viewport_mode_t _viewport_mode = g_context->viewport_mode; - g_context->viewport_mode = VIEWPORT_MODE_MINUS_ONE; + g_context->viewport_mode = VIEWPORT_MODE_NONE; context_set_viewport_mode(_viewport_mode); context_init_tool(); @@ -460,6 +460,10 @@ void context_set_viewport_mode(viewport_mode_t mode) { } } +void context_set_camera_controls(int i) { + g_context->camera_controls = i; +} + void context_load_envmap() { if (!g_context->envmap_loaded) { // TODO: Unable to share texture for both radiance and envmap - reload image diff --git a/paint/sources/enums.h b/paint/sources/enums.h index e95c3736..1325a58c 100644 --- a/paint/sources/enums.h +++ b/paint/sources/enums.h @@ -49,7 +49,7 @@ typedef enum { } bake_up_axis_t; typedef enum { - VIEWPORT_MODE_MINUS_ONE = -1, + VIEWPORT_MODE_NONE = -1, VIEWPORT_MODE_LIT = 0, VIEWPORT_MODE_BASE_COLOR = 1, VIEWPORT_MODE_NORMAL_MAP = 2, @@ -145,6 +145,7 @@ typedef enum { } blend_type_t; typedef enum { + CAMERA_CONTROLS_NONE = -1, CAMERA_CONTROLS_ORBIT = 0, CAMERA_CONTROLS_ROTATE = 1, CAMERA_CONTROLS_FLY = 2, diff --git a/paint/sources/functions.h b/paint/sources/functions.h index 69569d53..423201da 100644 --- a/paint/sources/functions.h +++ b/paint/sources/functions.h @@ -157,6 +157,8 @@ void base_redraw_status(); void base_redraw_console(); uint32_t base_darker(uint32_t x, uint32_t y); void base_redraw_ui(); +string_array_t *base_get_viewport_modes(); +string_array_t *base_get_viewport_mode_shortcuts(); ui_handle_t_array_t *ui_base_init_hwnds(); ui_handle_t_array_t *ui_base_init_htabs(); tab_draw_array_t_array_t *ui_base_init_hwnd_tabs(); @@ -577,6 +579,9 @@ void render_path_raytrace_raytrace_init(char *shader_nam void render_path_raytrace_draw(bool use_live_layer); node_shader_context_t *sculpt_make_sculpt_run(material_t *data, material_context_t *matcon); void sculpt_make_mesh_run(node_shader_t *kong, slot_layer_t *l); +void sculpt_import_mesh_pack_to_texture(mesh_data_t *mesh, slot_layer_t *l); +void sculpt_setup_layer_sculpt_texture(slot_layer_t *l, mesh_data_t *md); +void sculpt_setup(); void sculpt_layers_create_sculpt_layer(); void render_path_sculpt_commands(); void render_path_sculpt_begin(); diff --git a/paint/sources/import_arm.c b/paint/sources/import_arm.c index cb02c9e3..a1a7c8a8 100644 --- a/paint/sources/import_arm.c +++ b/paint/sources/import_arm.c @@ -595,6 +595,7 @@ void import_arm_run_project(char *path) { sys_notify_on_next_frame(&import_arm_run_project_on_next_frame, NULL); + base_update_workflow(); ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1]->redraws = 2; g_context->ddirty = 4; diff --git a/paint/sources/ui_menubar.c b/paint/sources/ui_menubar.c index 8d10ff11..8f7f9da0 100644 --- a/paint/sources/ui_menubar.c +++ b/paint/sources/ui_menubar.c @@ -497,49 +497,8 @@ void ui_menubar_draw_category_items() { else if (ui_menubar_category == MENUBAR_CATEGORY_MODE) { ui_handle_t *mode_handle = ui_handle(__ID__); mode_handle->i = g_context->viewport_mode; - string_array_t *modes = any_array_create_from_raw( - (void *[]){ - tr("Lit"), - tr("Base Color"), - tr("Normal"), - tr("Occlusion"), - tr("Roughness"), - tr("Metallic"), - tr("Opacity"), - tr("Height"), - tr("Emission"), - tr("Subsurface"), - tr("TexCoord"), - tr("Object Normal"), - tr("Material ID"), - tr("Object ID"), - tr("Mask"), - }, - 15); - string_array_t *shortcuts = any_array_create_from_raw( - (void *[]){ - "l", - "b", - "n", - "o", - "r", - "m", - "a", - "h", - "e", - "s", - "t", - "1", - "2", - "3", - "4", - }, - 15); - - if (gpu_raytrace_supported()) { - any_array_push(modes, tr("Path Traced")); - any_array_push(shortcuts, "p"); - } + string_array_t *modes = base_get_viewport_modes(); + string_array_t *shortcuts = base_get_viewport_mode_shortcuts(); if (g_config->workflow == WORKFLOW_BASE) { array_splice(modes, 9, 1); diff --git a/paint/sources/util_encode.c b/paint/sources/util_encode.c index 3106426f..ab1908d3 100644 --- a/paint/sources/util_encode.c +++ b/paint/sources/util_encode.c @@ -138,6 +138,7 @@ buffer_t *util_encode_project(project_t *raw) { armpack_encode_start(encoded->buffer); armpack_encode_map(25); + armpack_encode_string("version"); armpack_encode_string(raw->version); armpack_encode_string("assets");