diff --git a/base/sources/libs/minic_api.c b/base/sources/libs/minic_api.c index f118ca3d..0df3b296 100644 --- a/base/sources/libs/minic_api.c +++ b/base/sources/libs/minic_api.c @@ -643,16 +643,14 @@ void ui_files_show2(char *filters, bool is_save, bool open_multiple, void *files ui_files_show(filters, is_save, open_multiple, _ui_files_show_done); } void project_save(bool save_and_quit); -extern char *project_filepath; extern context_t *g_context; extern config_t *g_config; extern project_t *g_project; -extern mesh_object_t_array_t *project_paint_objects; char *project_filepath_get() { - return project_filepath; + return g_project->_->filepath; } void project_filepath_set(char *s) { - project_filepath = string_copy(s); + g_project->_->filepath = string_copy(s); } context_t *script_get_context() { return g_context; @@ -665,9 +663,9 @@ project_t *script_get_project() { } object_t *script_get_object(char *s) { - for (int i = 0; i < project_paint_objects->length; ++i) { - if (string_equals(project_paint_objects->buffer[i]->base->name, s)) { - return project_paint_objects->buffer[i]->base; + for (int i = 0; i < g_project->_->paint_objects->length; ++i) { + if (string_equals(g_project->_->paint_objects->buffer[i]->base->name, s)) { + return g_project->_->paint_objects->buffer[i]->base; } } return NULL; diff --git a/paint/plugins/plugins.c b/paint/plugins/plugins.c index 5562a453..ea77a463 100644 --- a/paint/plugins/plugins.c +++ b/paint/plugins/plugins.c @@ -31,7 +31,7 @@ string_array_t *path_texture_formats(void); extern any_map_t *util_mesh_unwrappers; extern any_map_t *data_cached_images; void import_texture_run(char *path, bool hdr_as_envmap); -extern any_array_t *project_assets; +any_array_t *project_get_assets(void); void tab_textures_delete_texture(asset_t *asset); int plugins_skinning_frame = -1; @@ -54,6 +54,7 @@ static void *import_psd(char *path) { // Delete existing layers so they can be re-imported char *prefix = string("%s.", filename); + any_array_t *project_assets = project_get_assets(); for (int i = project_assets->length - 1; i >= 0; --i) { asset_t *a = project_assets->buffer[i]; if (starts_with(a->name, prefix)) { diff --git a/paint/sources/args.c b/paint/sources/args.c index f25ebbef..aa9645aa 100644 --- a/paint/sources/args.c +++ b/paint/sources/args.c @@ -24,9 +24,7 @@ void args_parse() { char *current_arg = iron_get_arg(i); if (path_is_project(current_arg)) { - gc_unroot(project_filepath); - project_filepath = string_copy(current_arg); - gc_root(project_filepath); + g_project->_->filepath = string_copy(current_arg); } else if (string_equals(current_arg, "--background")) { args_background = true; @@ -100,8 +98,8 @@ void args_run_export_queue(void *_) { } void args_run_on_next_frame(void *_) { - if (!string_equals(project_filepath, "")) { - import_arm_run_project(project_filepath); + if (!string_equals(g_project->_->filepath, "")) { + import_arm_run_project(g_project->_->filepath); } else if (!string_equals(args_asset_path, "")) { import_asset_run(args_asset_path, -1, -1, false, true, NULL); diff --git a/paint/sources/base.c b/paint/sources/base.c index 8e160af7..50b715ba 100644 --- a/paint/sources/base.c +++ b/paint/sources/base.c @@ -62,7 +62,7 @@ void base_on_drop_files(char *drop_path) { void base_init_on_start_arm(void *_) { if (base_start_arm_found) { - import_arm_run_project(project_filepath); + import_arm_run_project(g_project->_->filepath); } g_context->tool = TOOL_TYPE_CURSOR; // Auto-run main script @@ -103,7 +103,7 @@ void base_material_dropped() { layers_create_fill_layer(uv_type, decal_mat, g_context->drag_dest); } else if (context_in_nodes()) { - ui_nodes_accept_material_drop(array_index_of(project_materials, base_drag_material)); + ui_nodes_accept_material_drop(array_index_of(g_project->_->materials, base_drag_material)); } else if (context_in_materials()) { tab_materials_accept_material_drop(base_drag_material); @@ -114,7 +114,7 @@ void base_material_dropped() { void base_update_import_asset_done() { // Asset was material - if (project_materials->length > _base_material_count) { + if (g_project->_->materials->length > _base_material_count) { gc_unroot(base_drag_material); base_drag_material = g_context->material; gc_root(base_drag_material); @@ -191,7 +191,7 @@ void base_update(void *_) { // Create image texture if (context_in_nodes()) { - ui_nodes_accept_asset_drop(array_index_of(project_assets, base_drag_asset)); + ui_nodes_accept_asset_drop(array_index_of(g_project->_->assets, base_drag_asset)); } else if (context_in_3d_view()) { if (ends_with(to_lower_case(base_drag_asset->file), ".hdr")) { @@ -239,7 +239,7 @@ void base_update(void *_) { base_drop_x = mouse_x; base_drop_y = mouse_y; - _base_material_count = project_materials->length; + _base_material_count = g_project->_->materials->length; import_asset_run(base_drag_file, base_drop_x, base_drop_y, true, true, &base_update_import_asset_done); } @@ -253,7 +253,7 @@ void base_update(void *_) { } else if (base_drag_layer != NULL) { if (context_in_nodes()) { - ui_nodes_accept_layer_drop(array_index_of(project_layers, base_drag_layer)); + ui_nodes_accept_layer_drop(array_index_of(g_project->_->layers, base_drag_layer)); } else if (context_in_layers() && base_is_dragging) { slot_layer_move(base_drag_layer, g_context->drag_dest); @@ -652,7 +652,7 @@ void ui_base_init() { project_new(false); - if (string_equals(project_filepath, "")) { + if (string_equals(g_project->_->filepath, "")) { sys_notify_on_next_frame(&ui_base_init_on_next_frame, NULL); } @@ -1005,8 +1005,8 @@ void ui_base_update_ui() { g_context->layer_preview_dirty = false; g_context->mask_preview_last = NULL; // Update all layer previews - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_group(l)) { continue; } @@ -1846,9 +1846,7 @@ void base_init() { // Startup project char *start_arm = string("%s/start.arm", iron_internal_files_location()); if (iron_file_exists(start_arm)) { - gc_unroot(project_filepath); - project_filepath = start_arm; - gc_root(project_filepath); + g_project->_->filepath = start_arm; base_start_arm_found = true; args_player = true; } @@ -2009,10 +2007,10 @@ void base_resize() { string_array_t *base_combo_enum_texts(char *node_type) { if (string_equals(node_type, "TEX_IMAGE")) { - if (project_assets->length > 0) { + if (g_project->_->assets->length > 0) { string_array_t *asset_names = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_assets->length; ++i) { - any_array_push(asset_names, project_assets->buffer[i]->name); + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + any_array_push(asset_names, g_project->_->assets->buffer[i]->name); } return asset_names; } @@ -2028,8 +2026,8 @@ string_array_t *base_combo_enum_texts(char *node_type) { if (string_equals(node_type, "LAYER") || string_equals(node_type, "LAYER_MASK")) { string_array_t *layer_names = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; any_array_push(layer_names, l->name); } return layer_names; @@ -2037,18 +2035,18 @@ string_array_t *base_combo_enum_texts(char *node_type) { if (string_equals(node_type, "MATERIAL")) { string_array_t *material_names = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; any_array_push(material_names, m->canvas->name); } return material_names; } if (string_equals(node_type, "image_texture_node")) { - if (project_assets->length > 0) { + if (g_project->_->assets->length > 0) { string_array_t *asset_names = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_assets->length; ++i) { - any_array_push(asset_names, project_assets->buffer[i]->name); + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + any_array_push(asset_names, g_project->_->assets->buffer[i]->name); } return asset_names; } @@ -2068,8 +2066,8 @@ string_array_t *base_combo_enum_texts(char *node_type) { any_array_t *base_combo_enum_images(char *node_type) { if (string_equals(node_type, "TEX_IMAGE")) { any_array_t *ar = any_array_create(0); - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *asset = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *asset = g_project->_->assets->buffer[i]; gpu_texture_t *img = project_get_image(asset); any_array_push(ar, img); } @@ -2078,8 +2076,8 @@ any_array_t *base_combo_enum_images(char *node_type) { if (string_equals(node_type, "LAYER") || string_equals(node_type, "LAYER_MASK")) { any_array_t *ar = any_array_create(0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; any_array_push(ar, l->texpaint_preview); } return ar; @@ -2087,8 +2085,8 @@ any_array_t *base_combo_enum_images(char *node_type) { if (string_equals(node_type, "MATERIAL")) { any_array_t *ar = any_array_create(0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; any_array_push(ar, m->image_icon); } return ar; @@ -2096,8 +2094,8 @@ any_array_t *base_combo_enum_images(char *node_type) { if (string_equals(node_type, "image_texture_node")) { any_array_t *ar = any_array_create(0); - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *asset = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *asset = g_project->_->assets->buffer[i]; gpu_texture_t *img = project_get_image(asset); any_array_push(ar, img); } @@ -2108,8 +2106,8 @@ any_array_t *base_combo_enum_images(char *node_type) { } i32 base_get_asset_index(char *file_name) { - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->name, file_name)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->name, file_name)) { return i; } } @@ -2442,8 +2440,8 @@ void base_update_workflow_create_sculpt_layer(void *_) { void base_update_workflow() { // Update Material Output nodes - for (i32 i = 0; i < project_materials->length; ++i) { - ui_node_array_t *nodes = project_materials->buffer[i]->canvas->nodes; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + ui_node_array_t *nodes = g_project->_->materials->buffer[i]->canvas->nodes; for (i32 j = 0; j < nodes->length; ++j) { if (string_equals(nodes->buffer[j]->type, "OUTPUT_MATERIAL_PBR")) { nodes->buffer[j]->inputs->length = g_config->workflow == WORKFLOW_PBR ? 9 : 2; @@ -2454,9 +2452,9 @@ 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]; + for (i32 i = g_project->_->layers->length - 1; i >= 0; --i) { + if (g_project->_->layers->buffer[i]->texpaint_sculpt != NULL) { + first_sculpt = g_project->_->layers->buffer[i]; break; } } @@ -2469,8 +2467,8 @@ void base_update_workflow() { } } else { - for (i32 i = project_layers->length - 1; i >= 0; --i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = g_project->_->layers->length - 1; i >= 0; --i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->texpaint_sculpt == NULL && slot_layer_is_layer(l)) { context_set_layer(l); break; @@ -2480,13 +2478,13 @@ void base_update_workflow() { } void base_run_in_player() { - if (string_equals(project_filepath, "")) { + if (string_equals(g_project->_->filepath, "")) { console_error(tr("Save project first")); return; } export_arm_run_project(); char *bin = iron_get_arg(0); - iron_sys_command(string("%s %s --player", bin, project_filepath)); + iron_sys_command(string("%s %s --player", bin, g_project->_->filepath)); // iron_exec_async() } diff --git a/paint/sources/context.c b/paint/sources/context.c index 6883e8a8..1c4c2bfa 100644 --- a/paint/sources/context.c +++ b/paint/sources/context.c @@ -178,10 +178,10 @@ bool context_use_deferred() { } void context_select_material(i32 i) { - if (project_materials->length <= i) { + if (g_project->_->materials->length <= i) { return; } - context_set_material(project_materials->buffer[i]); + context_set_material(g_project->_->materials->buffer[i]); } void context_set_material_on_next_frame(void *_) { @@ -189,7 +189,7 @@ void context_set_material_on_next_frame(void *_) { } void context_set_material(slot_material_t *m) { - if (array_index_of(project_materials, m) == -1) { + if (array_index_of(g_project->_->materials, m) == -1) { return; } g_context->material = m; @@ -208,14 +208,14 @@ void context_set_material(slot_material_t *m) { } void context_select_brush(i32 i) { - if (project_brushes->length <= i) { + if (g_project->_->brushes->length <= i) { return; } - context_set_brush(project_brushes->buffer[i]); + context_set_brush(g_project->_->brushes->buffer[i]); } void context_set_brush(slot_brush_t *b) { - if (array_index_of(project_brushes, b) == -1) { + if (array_index_of(g_project->_->brushes, b) == -1) { return; } g_context->brush = b; @@ -227,7 +227,7 @@ void context_set_brush(slot_brush_t *b) { } void context_set_font(slot_font_t *f) { - if (array_index_of(project_fonts, f) == -1) { + if (array_index_of(g_project->_->fonts, f) == -1) { return; } g_context->font = f; @@ -238,17 +238,17 @@ void context_set_font(slot_font_t *f) { } void context_select_font(i32 i) { - if (project_fonts->length <= i) { + if (g_project->_->fonts->length <= i) { return; } - context_set_font(project_fonts->buffer[i]); + context_set_font(g_project->_->fonts->buffer[i]); } void context_select_layer(i32 i) { - if (project_layers->length <= i) { + if (g_project->_->layers->length <= i) { return; } - context_set_layer(project_layers->buffer[i]); + context_set_layer(g_project->_->layers->buffer[i]); } void context_set_layer(slot_layer_t *l) { @@ -303,8 +303,8 @@ void context_init_tool() { void context_select_paint_object(mesh_object_t *o) { ui_header_handle->redraws = 2; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; p->skip_context = "paint"; } @@ -328,21 +328,21 @@ void context_select_paint_object(mesh_object_t *o) { } mesh_object_t *context_main_object() { - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *po = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *po = g_project->_->paint_objects->buffer[i]; if (po->base->children->length > 0) { return po; } } - return project_paint_objects->buffer[0]; + return g_project->_->paint_objects->buffer[0]; } bool context_layer_filter_used() { - return g_context->layer_filter > 0 && g_context->layer_filter <= project_paint_objects->length; + return g_context->layer_filter > 0 && g_context->layer_filter <= g_project->_->paint_objects->length; } bool context_object_mask_used() { - return slot_layer_get_object_mask(g_context->layer) > 0 && slot_layer_get_object_mask(g_context->layer) <= project_paint_objects->length; + return slot_layer_get_object_mask(g_context->layer) > 0 && slot_layer_get_object_mask(g_context->layer) <= g_project->_->paint_objects->length; } bool context_in_3d_view() { diff --git a/paint/sources/functions.h b/paint/sources/functions.h index f9b29fd1..b2df4ea6 100644 --- a/paint/sources/functions.h +++ b/paint/sources/functions.h @@ -404,6 +404,7 @@ void project_import_swatches(bool replace_existing); void project_reimport_textures(); void project_reimport_texture(asset_t *asset); gpu_texture_t *project_get_image(asset_t *asset); +asset_t_array_t *project_get_assets(); string_array_t *project_get_used_atlases(); bool project_is_atlas_object(mesh_object_t *p); mesh_object_t_array_t *project_get_atlas_objects(i32 object_mask); diff --git a/paint/sources/globals.h b/paint/sources/globals.h index 30437cb8..7c6d37a7 100644 --- a/paint/sources/globals.h +++ b/paint/sources/globals.h @@ -174,16 +174,7 @@ bool ui_menu_show_first = true; i32 render_path_base_bloom_current_mip = 0; f32 render_path_base_bloom_sample_scale; bool render_path_base_buf_swapped = false; -char *project_filepath = ""; -asset_t_array_t *project_assets; -i32 project_asset_id = 0; -node_group_t_array_t *project_material_groups; -mesh_object_t_array_t *project_paint_objects = NULL; -string_array_t *project_mesh_list = NULL; -slot_material_t_array_t *project_materials; -slot_brush_t_array_t *project_brushes; -slot_layer_t_array_t *project_layers; -slot_font_t_array_t *project_fonts; +string_array_t *project_default_mesh_list = NULL; gpu_pipeline_t *ui_view2d_pipe; i32 ui_view2d_channel_loc; view_2d_type_t ui_view2d_type = VIEW_2D_TYPE_LAYER; diff --git a/paint/sources/history.c b/paint/sources/history.c index 446ab9a0..8274791d 100644 --- a/paint/sources/history.c +++ b/paint/sources/history.c @@ -58,7 +58,7 @@ char *history_action_to_string(history_action_t action) { } void history_undo_invert_mask(history_step_t *step) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; slot_layer_invert_mask(g_context->layer); } @@ -76,19 +76,19 @@ void history_undo_delete_layer_group(void *_) { ui_node_canvas_t *history_get_canvas(history_step_t *step) { if (step->canvas_group == -1) { - return project_materials->buffer[step->material]->canvas; + return g_project->_->materials->buffer[step->material]->canvas; } else { - return project_material_groups->buffer[step->canvas_group]->canvas; + return g_project->_->material_groups->buffer[step->canvas_group]->canvas; } } void history_set_canvas(history_step_t *step, ui_node_canvas_t *canvas) { if (step->canvas_group == -1) { - project_materials->buffer[step->material]->canvas = canvas; + g_project->_->materials->buffer[step->material]->canvas = canvas; } else { - project_material_groups->buffer[step->canvas_group]->canvas = canvas; + g_project->_->material_groups->buffer[step->canvas_group]->canvas = canvas; } } @@ -97,13 +97,13 @@ void history_swap_canvas(history_step_t *step) { ui_node_canvas_t *_canvas = history_get_canvas(step); history_set_canvas(step, step->canvas); step->canvas = _canvas; - g_context->material = project_materials->buffer[step->material]; + g_context->material = g_project->_->materials->buffer[step->material]; } else { - ui_node_canvas_t *_canvas = project_brushes->buffer[step->brush]->canvas; - project_brushes->buffer[step->brush]->canvas = step->canvas; + ui_node_canvas_t *_canvas = g_project->_->brushes->buffer[step->brush]->canvas; + g_project->_->brushes->buffer[step->brush]->canvas = step->canvas; step->canvas = _canvas; - g_context->brush = project_brushes->buffer[step->brush]; + g_context->brush = g_project->_->brushes->buffer[step->brush]; } ui_nodes_t *nodes = ui_nodes_get_nodes(); @@ -123,21 +123,21 @@ void history_undo() { } else if (step->action == HISTORY_ACTION_NEW_LAYER || step->action == HISTORY_ACTION_NEW_BLACK_MASK || step->action == HISTORY_ACTION_NEW_WHITE_MASK || step->action == HISTORY_ACTION_NEW_FILL_MASK) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; slot_layer_delete(g_context->layer); - g_context->layer = project_layers->buffer[step->layer > 0 ? step->layer - 1 : 0]; + g_context->layer = g_project->_->layers->buffer[step->layer > 0 ? step->layer - 1 : 0]; } else if (step->action == HISTORY_ACTION_NEW_GROUP) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; // The layer below is the only layer in the group. Its layer masks are automatically unparented, too. - project_layers->buffer[step->layer - 1]->parent = NULL; + g_project->_->layers->buffer[step->layer - 1]->parent = NULL; slot_layer_delete(g_context->layer); - g_context->layer = project_layers->buffer[step->layer > 0 ? step->layer - 1 : 0]; + g_context->layer = g_project->_->layers->buffer[step->layer > 0 ? step->layer - 1 : 0]; } else if (step->action == HISTORY_ACTION_DELETE_LAYER) { - slot_layer_t *parent = step->layer_parent > 0 ? project_layers->buffer[step->layer_parent - 1] : NULL; + slot_layer_t *parent = step->layer_parent > 0 ? g_project->_->layers->buffer[step->layer_parent - 1] : NULL; slot_layer_t *l = slot_layer_create("", step->layer_type, parent); - array_insert(project_layers, step->layer, l); + array_insert(g_project->_->layers, step->layer, l); context_set_layer(l); history_undo_i = history_undo_i - 1 < 0 ? g_config->undo_steps - 1 : history_undo_i - 1; slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; @@ -159,27 +159,27 @@ void history_undo() { g_context->layer_preview_dirty = true; } else if (step->action == HISTORY_ACTION_DUPLICATE_LAYER) { - slot_layer_t_array_t *children = slot_layer_get_recursive_children(project_layers->buffer[step->layer]); + slot_layer_t_array_t *children = slot_layer_get_recursive_children(g_project->_->layers->buffer[step->layer]); i32 position = step->layer + 1; if (children != NULL) { position += children->length; } - g_context->layer = project_layers->buffer[position]; + g_context->layer = g_project->_->layers->buffer[position]; slot_layer_delete(g_context->layer); } else if (step->action == HISTORY_ACTION_ORDER_LAYERS) { - slot_layer_t *target = project_layers->buffer[step->prev_order]; - project_layers->buffer[step->prev_order] = project_layers->buffer[step->layer]; - project_layers->buffer[step->layer] = target; + slot_layer_t *target = g_project->_->layers->buffer[step->prev_order]; + g_project->_->layers->buffer[step->prev_order] = g_project->_->layers->buffer[step->layer]; + g_project->_->layers->buffer[step->layer] = target; } else if (step->action == HISTORY_ACTION_MERGE_LAYERS) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; slot_layer_delete(g_context->layer); - slot_layer_t *parent = step->layer_parent > 0 ? project_layers->buffer[step->layer_parent - 2] : NULL; + slot_layer_t *parent = step->layer_parent > 0 ? g_project->_->layers->buffer[step->layer_parent - 2] : NULL; slot_layer_t *l = slot_layer_create("", step->layer_type, parent); - array_insert(project_layers, step->layer, l); + array_insert(g_project->_->layers, step->layer, l); context_set_layer(l); history_undo_i = history_undo_i - 1 < 0 ? g_config->undo_steps - 1 : history_undo_i - 1; @@ -187,7 +187,7 @@ void history_undo() { slot_layer_swap(g_context->layer, lay); l = slot_layer_create("", step->layer_type, parent); - array_insert(project_layers, step->layer + 1, l); + array_insert(g_project->_->layers, step->layer + 1, l); context_set_layer(l); history_undo_i = history_undo_i - 1 < 0 ? g_config->undo_steps - 1 : history_undo_i - 1; @@ -205,11 +205,11 @@ void history_undo() { i32 mask_pos = step->layer; slot_layer_t *current_layer = NULL; // The layer at the old mask position is a mask, i.e. the layer had multiple masks before. - if (slot_layer_is_mask(project_layers->buffer[mask_pos])) { - current_layer = project_layers->buffer[mask_pos]->parent; + if (slot_layer_is_mask(g_project->_->layers->buffer[mask_pos])) { + current_layer = g_project->_->layers->buffer[mask_pos]->parent; } - else if (slot_layer_is_layer(project_layers->buffer[mask_pos]) || slot_layer_is_group(project_layers->buffer[mask_pos])) { - current_layer = project_layers->buffer[mask_pos]; + else if (slot_layer_is_layer(g_project->_->layers->buffer[mask_pos]) || slot_layer_is_group(g_project->_->layers->buffer[mask_pos])) { + current_layer = g_project->_->layers->buffer[mask_pos]; } slot_layer_t_array_t *layers_to_restore; @@ -248,7 +248,7 @@ void history_undo() { else if (step->action == HISTORY_ACTION_APPLY_FILTER) { history_undo_i = history_undo_i - 1 < 0 ? g_config->undo_steps - 1 : history_undo_i - 1; slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; - context_set_layer(project_layers->buffer[step->layer]); + context_set_layer(g_project->_->layers->buffer[step->layer]); slot_layer_swap(g_context->layer, lay); layers_new_mask(false, g_context->layer, -1); slot_layer_swap(g_context->layer, lay); @@ -264,17 +264,17 @@ void history_undo() { history_undo_i = history_undo_i - 1 < 0 ? g_config->undo_steps - 1 : history_undo_i - 1; slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; slot_layer_swap(g_context->layer, lay); - g_context->layer->fill_material = project_materials->buffer[step->material]; + g_context->layer->fill_material = g_project->_->materials->buffer[step->material]; } else if (step->action == HISTORY_ACTION_LAYER_OPACITY) { - context_set_layer(project_layers->buffer[step->layer]); + context_set_layer(g_project->_->layers->buffer[step->layer]); f32 t = g_context->layer->mask_opacity; g_context->layer->mask_opacity = step->layer_opacity; step->layer_opacity = t; make_material_parse_mesh_material(); } else if (step->action == HISTORY_ACTION_LAYER_BLENDING) { - context_set_layer(project_layers->buffer[step->layer]); + context_set_layer(g_project->_->layers->buffer[step->layer]); blend_type_t t = g_context->layer->blending; g_context->layer->blending = step->layer_blending; step->layer_blending = t; @@ -282,31 +282,31 @@ void history_undo() { } else if (step->action == HISTORY_ACTION_DELETE_NODE_GROUP) { node_group_t *ng = GC_ALLOC_INIT(node_group_t, {.canvas = NULL, .nodes = ui_nodes_create()}); - array_insert(project_material_groups, step->canvas_group, ng); + array_insert(g_project->_->material_groups, step->canvas_group, ng); history_swap_canvas(step); } else if (step->action == HISTORY_ACTION_NEW_MATERIAL) { - g_context->material = project_materials->buffer[step->material]; + g_context->material = g_project->_->materials->buffer[step->material]; step->canvas = g_context->material->canvas; slot_material_delete(g_context->material); } else if (step->action == HISTORY_ACTION_DELETE_MATERIAL) { - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); - array_insert(project_materials, step->material, g_context->material); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); + array_insert(g_project->_->materials, step->material, g_context->material); g_context->material->canvas = step->canvas; ui_nodes_canvas_changed(); ui_nodes_hwnd->redraws = 2; } else if (step->action == HISTORY_ACTION_DUPLICATE_MATERIAL) { - g_context->material = project_materials->buffer[step->material]; + g_context->material = g_project->_->materials->buffer[step->material]; step->canvas = g_context->material->canvas; slot_material_delete(g_context->material); } else { // Paint operation history_undo_i = history_undo_i - 1 < 0 ? g_config->undo_steps - 1 : history_undo_i - 1; slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; - context_select_paint_object(project_paint_objects->buffer[step->object]); - context_set_layer(project_layers->buffer[step->layer]); + context_select_paint_object(g_project->_->paint_objects->buffer[step->object]); + context_set_layer(g_project->_->layers->buffer[step->layer]); slot_layer_swap(g_context->layer, lay); g_context->layer_preview_dirty = true; } @@ -330,7 +330,7 @@ void history_undo() { } void history_redo_invert_mask(history_step_t *step) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; slot_layer_invert_mask(g_context->layer); } @@ -386,8 +386,8 @@ void history_copy_merging_layers() { slot_layer_t *lay = g_context->layer; history_copy_to_undo(lay->id, history_undo_i, slot_layer_is_mask(g_context->layer)); - i32 below = array_index_of(project_layers, lay) - 1; - lay = project_layers->buffer[below]; + i32 below = array_index_of(g_project->_->layers, lay) - 1; + lay = g_project->_->layers->buffer[below]; history_copy_to_undo(lay->id, history_undo_i, slot_layer_is_mask(g_context->layer)); } @@ -445,9 +445,9 @@ void history_redo() { } else if (step->action == HISTORY_ACTION_NEW_LAYER || step->action == HISTORY_ACTION_NEW_BLACK_MASK || step->action == HISTORY_ACTION_NEW_WHITE_MASK || step->action == HISTORY_ACTION_NEW_FILL_MASK) { - slot_layer_t *parent = step->layer_parent > 0 ? project_layers->buffer[step->layer_parent - 1] : NULL; + slot_layer_t *parent = step->layer_parent > 0 ? g_project->_->layers->buffer[step->layer_parent - 1] : NULL; slot_layer_t *l = slot_layer_create("", step->layer_type, parent); - array_insert(project_layers, step->layer, l); + array_insert(g_project->_->layers, step->layer, l); if (step->action == HISTORY_ACTION_NEW_BLACK_MASK) { sys_notify_on_next_frame(&history_redo_new_black_mask, l); } @@ -455,22 +455,22 @@ void history_redo() { sys_notify_on_next_frame(&history_redo_new_white_mask, l); } else if (step->action == HISTORY_ACTION_NEW_FILL_MASK) { - g_context->material = project_materials->buffer[step->material]; + g_context->material = g_project->_->materials->buffer[step->material]; sys_notify_on_next_frame(&history_redo_new_fill_mask, l); } g_context->layer_preview_dirty = true; context_set_layer(l); } else if (step->action == HISTORY_ACTION_NEW_GROUP) { - slot_layer_t *l = project_layers->buffer[step->layer - 1]; + slot_layer_t *l = g_project->_->layers->buffer[step->layer - 1]; slot_layer_t *group = layers_new_group(); - array_remove(project_layers, group); - array_insert(project_layers, step->layer, group); + array_remove(g_project->_->layers, group); + array_insert(g_project->_->layers, step->layer, group); l->parent = group; context_set_layer(group); } else if (step->action == HISTORY_ACTION_DELETE_LAYER) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; history_swap_active(); slot_layer_delete(g_context->layer); @@ -483,27 +483,27 @@ void history_redo() { } } else if (step->action == HISTORY_ACTION_CLEAR_LAYER) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; history_swap_active(); slot_layer_clear(g_context->layer, 0x00000000, NULL, 1.0, layers_default_rough, 0.0); g_context->layer_preview_dirty = true; } else if (step->action == HISTORY_ACTION_DUPLICATE_LAYER) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; sys_notify_on_next_frame(&history_redo_duplicate_layer, NULL); } else if (step->action == HISTORY_ACTION_ORDER_LAYERS) { - slot_layer_t *target = project_layers->buffer[step->prev_order]; - project_layers->buffer[step->prev_order] = project_layers->buffer[step->layer]; - project_layers->buffer[step->layer] = target; + slot_layer_t *target = g_project->_->layers->buffer[step->prev_order]; + g_project->_->layers->buffer[step->prev_order] = g_project->_->layers->buffer[step->layer]; + g_project->_->layers->buffer[step->layer] = target; } else if (step->action == HISTORY_ACTION_MERGE_LAYERS) { - g_context->layer = project_layers->buffer[step->layer + 1]; + g_context->layer = g_project->_->layers->buffer[step->layer + 1]; sys_notify_on_next_frame(&history_redo_merge_layers, NULL); sys_notify_on_next_frame(&history_redo_merge_layers2, NULL); } else if (step->action == HISTORY_ACTION_APPLY_MASK) { - g_context->layer = project_layers->buffer[step->layer]; + g_context->layer = g_project->_->layers->buffer[step->layer]; if (slot_layer_is_group_mask(g_context->layer)) { slot_layer_t *group = g_context->layer->parent; slot_layer_t_array_t *layers = slot_layer_get_children(group); @@ -527,7 +527,7 @@ void history_redo() { } else if (step->action == HISTORY_ACTION_APPLY_FILTER) { slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; - context_set_layer(project_layers->buffer[step->layer]); + context_set_layer(g_project->_->layers->buffer[step->layer]); slot_layer_swap(g_context->layer, lay); layers_new_mask(false, lay, -1); slot_layer_swap(g_context->layer, lay); @@ -537,7 +537,7 @@ void history_redo() { else if (step->action == HISTORY_ACTION_TO_FILL_LAYER || step->action == HISTORY_ACTION_TO_FILL_MASK) { slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; slot_layer_swap(g_context->layer, lay); - g_context->layer->fill_material = project_materials->buffer[step->material]; + g_context->layer->fill_material = g_project->_->materials->buffer[step->material]; history_undo_i = (history_undo_i + 1) % g_config->undo_steps; } else if (step->action == HISTORY_ACTION_TO_PAINT_LAYER || step->action == HISTORY_ACTION_TO_PAINT_MASK) { @@ -547,14 +547,14 @@ void history_redo() { history_undo_i = (history_undo_i + 1) % g_config->undo_steps; } else if (step->action == HISTORY_ACTION_LAYER_OPACITY) { - context_set_layer(project_layers->buffer[step->layer]); + context_set_layer(g_project->_->layers->buffer[step->layer]); f32 t = g_context->layer->mask_opacity; g_context->layer->mask_opacity = step->layer_opacity; step->layer_opacity = t; make_material_parse_mesh_material(); } else if (step->action == HISTORY_ACTION_LAYER_BLENDING) { - context_set_layer(project_layers->buffer[step->layer]); + context_set_layer(g_project->_->layers->buffer[step->layer]); blend_type_t t = g_context->layer->blending; g_context->layer->blending = step->layer_blending; step->layer_blending = t; @@ -562,31 +562,31 @@ void history_redo() { } else if (step->action == HISTORY_ACTION_DELETE_NODE_GROUP) { history_swap_canvas(step); - array_remove(project_material_groups, project_material_groups->buffer[step->canvas_group]); + array_remove(g_project->_->material_groups, g_project->_->material_groups->buffer[step->canvas_group]); } else if (step->action == HISTORY_ACTION_NEW_MATERIAL) { - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); - array_insert(project_materials, step->material, g_context->material); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); + array_insert(g_project->_->materials, step->material, g_context->material); g_context->material->canvas = step->canvas; ui_nodes_canvas_changed(); ui_nodes_hwnd->redraws = 2; } else if (step->action == HISTORY_ACTION_DELETE_MATERIAL) { - g_context->material = project_materials->buffer[step->material]; + g_context->material = g_project->_->materials->buffer[step->material]; step->canvas = g_context->material->canvas; slot_material_delete(g_context->material); } else if (step->action == HISTORY_ACTION_DUPLICATE_MATERIAL) { - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); - array_insert(project_materials, step->material, g_context->material); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); + array_insert(g_project->_->materials, step->material, g_context->material); g_context->material->canvas = step->canvas; ui_nodes_canvas_changed(); ui_nodes_hwnd->redraws = 2; } else { // Paint operation slot_layer_t *lay = history_undo_layers->buffer[history_undo_i]; - context_select_paint_object(project_paint_objects->buffer[step->object]); - context_set_layer(project_layers->buffer[step->layer]); + context_select_paint_object(g_project->_->paint_objects->buffer[step->object]); + context_set_layer(g_project->_->layers->buffer[step->layer]); slot_layer_swap(g_context->layer, lay); g_context->layer_preview_dirty = true; history_undo_i = (history_undo_i + 1) % g_config->undo_steps; @@ -627,9 +627,9 @@ void history_reset() { history_step_t *history_push(history_action_t action) { char *name = history_action_to_string(action); #if defined(IRON_WINDOWS) || defined(IRON_LINUX) || defined(IRON_MACOS) - char *filename = string_equals(project_filepath, "") + char *filename = string_equals(g_project->_->filepath, "") ? ui_files_filename - : substring(project_filepath, string_last_index_of(project_filepath, PATH_SEP) + 1, string_length(project_filepath) - 4); + : substring(g_project->_->filepath, string_last_index_of(g_project->_->filepath, PATH_SEP) + 1, string_length(g_project->_->filepath) - 4); sys_title_set(string("%s* - %s", filename, manifest_title)); #endif @@ -648,10 +648,10 @@ history_step_t *history_push(history_action_t action) { history_redos = 0; } - i32 opos = array_index_of(project_paint_objects, g_context->paint_object); - i32 lpos = array_index_of(project_layers, g_context->layer); - i32 mpos = array_index_of(project_materials, g_context->material); - i32 bpos = array_index_of(project_brushes, g_context->brush); + i32 opos = array_index_of(g_project->_->paint_objects, g_context->paint_object); + i32 lpos = array_index_of(g_project->_->layers, g_context->layer); + i32 mpos = array_index_of(g_project->_->materials, g_context->material); + i32 bpos = array_index_of(g_project->_->brushes, g_context->brush); history_step_t *step = GC_ALLOC_INIT(history_step_t, {.name = name, @@ -660,7 +660,7 @@ history_step_t *history_push(history_action_t action) { .layer_type = slot_layer_is_mask(g_context->layer) ? LAYER_SLOT_TYPE_MASK : slot_layer_is_group(g_context->layer) ? LAYER_SLOT_TYPE_GROUP : LAYER_SLOT_TYPE_LAYER, - .layer_parent = g_context->layer->parent == NULL ? -1 : array_index_of(project_layers, g_context->layer->parent), + .layer_parent = g_context->layer->parent == NULL ? -1 : array_index_of(g_project->_->layers, g_context->layer->parent), .object = opos, .material = mpos, .brush = bpos, @@ -816,6 +816,6 @@ void history_duplicate_material() { void history_delete_material_group(node_group_t *group) { history_step_t *step = history_push(HISTORY_ACTION_DELETE_NODE_GROUP); step->canvas_type = CANVAS_TYPE_MATERIAL; - step->canvas_group = array_index_of(project_material_groups, group); + step->canvas_group = array_index_of(g_project->_->material_groups, group); step->canvas = util_clone_canvas(group->canvas); } diff --git a/paint/sources/io/export_arm.c b/paint/sources/io/export_arm.c index c9c67746..244cf305 100644 --- a/paint/sources/io/export_arm.c +++ b/paint/sources/io/export_arm.c @@ -27,7 +27,7 @@ void export_arm_export_node(ui_node_t *n, asset_t_array_t *assets) { n->buttons->buffer[0]->data = u8_array_create_from_string(base_combo_enum_texts(n->type)->buffer[index]); } if (assets != NULL) { - asset_t *asset = project_assets->buffer[index]; + asset_t *asset = g_project->_->assets->buffer[index]; if (array_index_of(assets, asset) == -1) { any_array_push(assets, asset); } @@ -104,8 +104,8 @@ void export_arm_run_project() { base_update_workflow(); ui_node_canvas_t_array_t *mnodes = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; ui_node_canvas_t *c = util_clone_canvas(m->canvas); for (i32 i = 0; i < c->nodes->length; ++i) { ui_node_t *n = c->nodes->buffer[i]; @@ -118,8 +118,8 @@ void export_arm_run_project() { base_update_workflow(); ui_node_canvas_t_array_t *bnodes = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_brushes->length; ++i) { - slot_brush_t *b = project_brushes->buffer[i]; + for (i32 i = 0; i < g_project->_->brushes->length; ++i) { + slot_brush_t *b = g_project->_->brushes->buffer[i]; ui_node_canvas_t *c = util_clone_canvas(b->canvas); for (i32 i = 0; i < c->nodes->length; ++i) { ui_node_t *n = c->nodes->buffer[i]; @@ -129,10 +129,10 @@ void export_arm_run_project() { } ui_node_canvas_t_array_t *mgroups = NULL; - if (project_material_groups->length > 0) { + if (g_project->_->material_groups->length > 0) { mgroups = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; ui_node_canvas_t *c = util_clone_canvas(g->canvas); for (i32 i = 0; i < c->nodes->length; ++i) { ui_node_t *n = c->nodes->buffer[i]; @@ -143,10 +143,10 @@ void export_arm_run_project() { } material_data2_t_array_t *mdata2 = NULL; - if (project_materials->length > 0) { + if (g_project->_->materials->length > 0) { mdata2 = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; material_data2_t *d = GC_ALLOC_INIT(material_data2_t, { .paint_base = m->paint_base, .paint_opac = m->paint_opac, @@ -164,24 +164,24 @@ void export_arm_run_project() { } mesh_data_t_array_t *md = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; any_array_push(md, p->data); } - string_array_t *texture_files = export_arm_assets_to_files(project_filepath, project_assets); + string_array_t *texture_files = export_arm_assets_to_files(g_project->_->filepath, g_project->_->assets); - string_array_t *font_files = export_arm_fonts_to_files(project_filepath, project_fonts); - string_array_t *mesh_files = export_arm_meshes_to_files(project_filepath); + string_array_t *font_files = export_arm_fonts_to_files(g_project->_->filepath, g_project->_->fonts); + string_array_t *mesh_files = export_arm_meshes_to_files(g_project->_->filepath); i32 bits_pos = base_bits_handle->i; i32 bpp = bits_pos == TEXTURE_BITS_BITS8 ? 8 : bits_pos == TEXTURE_BITS_BITS16 ? 16 : 32; layer_data_t_array_t *ld = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; layer_data_t *d = GC_ALLOC_INIT(layer_data_t, {.name = l->name, - .res = l->texpaint != NULL ? l->texpaint->width : project_layers->buffer[0]->texpaint->width, + .res = l->texpaint != NULL ? l->texpaint->width : g_project->_->layers->buffer[0]->texpaint->width, .bpp = bpp, .texpaint = l->texpaint != NULL ? lz4_encode(gpu_get_texture_pixels(l->texpaint)) : NULL, .uv_scale = l->scale, @@ -190,10 +190,10 @@ void export_arm_run_project() { .uv_map = l->uv_map, .decal_mat = l->uv_type == UV_TYPE_PROJECT ? mat4_to_f32_array(l->decal_mat) : NULL, .opacity_mask = l->mask_opacity, - .fill_material = l->fill_material != NULL ? array_index_of(project_materials, l->fill_material) : -1, + .fill_material = l->fill_material != NULL ? array_index_of(g_project->_->materials, l->fill_material) : -1, .object_mask = l->object_mask, .blending = l->blending, - .parent = l->parent != NULL ? array_index_of(project_layers, l->parent) : -1, + .parent = l->parent != NULL ? array_index_of(g_project->_->layers, l->parent) : -1, .visible = l->visible, .texpaint_nor = l->texpaint_nor != NULL ? lz4_encode(gpu_get_texture_pixels(l->texpaint_nor)) : NULL, .texpaint_pack = l->texpaint_pack != NULL ? lz4_encode(gpu_get_texture_pixels(l->texpaint_pack)) : NULL, @@ -214,7 +214,7 @@ void export_arm_run_project() { .path_points_parent = l->path_points_parent, .path_tool = l->path_tool, .path_curved = l->path_curved, - .path_material = l->path_material != NULL ? array_index_of(project_materials, l->path_material) : -1}); + .path_material = l->path_material != NULL ? array_index_of(g_project->_->materials, l->path_material) : -1}); any_array_push(ld, d); } @@ -222,7 +222,7 @@ void export_arm_run_project() { #ifdef IRON_IOS bool same_drive = false; #else - bool same_drive = g_project->envmap != NULL ? char_at(project_filepath, 0) == char_at(g_project->envmap, 0) : true; + bool same_drive = g_project->envmap != NULL ? char_at(g_project->_->filepath, 0) == char_at(g_project->envmap, 0) : true; #endif g_project->version = string_copy(manifest_version_project); @@ -231,7 +231,7 @@ void export_arm_run_project() { g_project->assets = texture_files; g_project->packed_assets = packed_assets; g_project->swatches = g_project->swatches; - g_project->envmap = g_project->envmap != NULL ? (same_drive ? path_to_relative(project_filepath, g_project->envmap) : g_project->envmap) : NULL; + g_project->envmap = g_project->envmap != NULL ? (same_drive ? path_to_relative(g_project->_->filepath, g_project->envmap) : g_project->envmap) : NULL; g_project->envmap_strength = scene_world->strength; g_project->envmap_angle = g_context->envmap_angle; g_project->envmap_blur = g_context->show_envmap_blur; @@ -251,8 +251,8 @@ void export_arm_run_project() { } f32_array_t_array_t *mesh_transforms = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; f32_array_t *ar = f32_array_create_from_raw(p->base->transform->local.m, 16); any_array_push(mesh_transforms, ar); } @@ -286,22 +286,22 @@ void export_arm_run_project() { for (i32 i = 0; i < 256 * 256 * 4; ++i) { u8a->buffer[i] = math_floor(math_pow(u8a->buffer[i] / 255.0, 1.0 / 2.2) * 255); } - iron_write_png(string("%s_icon.png", substring(project_filepath, 0, string_length(project_filepath) - 4)), mesh_icon_pixels, 256, 256, 0); + iron_write_png(string("%s_icon.png", substring(g_project->_->filepath, 0, string_length(g_project->_->filepath) - 4)), mesh_icon_pixels, 256, 256, 0); gpu_delete_texture(mesh_icon); #endif if (g_context->pack_assets_on_save) { // Pack textures - export_arm_pack_assets(g_project, project_assets); + export_arm_pack_assets(g_project, g_project->_->assets); } buffer_t *buffer = util_encode_project(g_project); - iron_file_save_bytes(project_filepath, buffer, buffer->length + 1); + iron_file_save_bytes(g_project->_->filepath, buffer, buffer->length + 1); // Save to recent #ifdef IRON_IOS - char *recent_path = substring(project_filepath, string_last_index_of(project_filepath, "/") + 1, string_length(project_filepath)); + char *recent_path = substring(g_project->_->filepath, string_last_index_of(g_project->_->filepath, "/") + 1, string_length(g_project->_->filepath)); #else - char *recent_path = project_filepath; + char *recent_path = g_project->_->filepath; #endif #ifdef IRON_WINDOWS diff --git a/paint/sources/io/export_mesh.c b/paint/sources/io/export_mesh.c index 5271a3ba..c38d01b8 100644 --- a/paint/sources/io/export_mesh.c +++ b/paint/sources/io/export_mesh.c @@ -7,7 +7,7 @@ void export_glb_run(char *path, mesh_object_t_array_t *paint_objects); void export_mesh_run(char *path, mesh_object_t_array_t *paint_objects, bool apply_disp, bool merge_vertices) { if (paint_objects == NULL) { - paint_objects = project_paint_objects; + paint_objects = g_project->_->paint_objects; } if (g_context->export_mesh_format == MESH_FORMAT_OBJ) { if (merge_vertices) { diff --git a/paint/sources/io/export_obj.c b/paint/sources/io/export_obj.c index 013b41c1..1e9efa8d 100644 --- a/paint/sources/io/export_obj.c +++ b/paint/sources/io/export_obj.c @@ -277,9 +277,9 @@ void export_obj_run_fast(char *path, mesh_object_t_array_t *paint_objects) { void export_obj_run_sculpt(char *path, mesh_object_t_array_t *paint_objects) { slot_layer_t *l = NULL; - for (i32 i = 0; i < project_layers->length; ++i) { - if (project_layers->buffer[i]->texpaint_sculpt != NULL) { - l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + if (g_project->_->layers->buffer[i]->texpaint_sculpt != NULL) { + l = g_project->_->layers->buffer[i]; break; } } diff --git a/paint/sources/io/export_player.c b/paint/sources/io/export_player.c index 2359309d..97123110 100644 --- a/paint/sources/io/export_player.c +++ b/paint/sources/io/export_player.c @@ -116,13 +116,13 @@ void export_player_run(char *path) { char *path_base = path_base_dir(path); - char *_project_filepath = string_copy(project_filepath); - project_filepath = string("%s/%s", path_base, "start.arm"); + char *_project_filepath = string_copy(g_project->_->filepath); + g_project->_->filepath = string("%s/%s", path_base, "start.arm"); bool _pack_assets_on_save = g_context->pack_assets_on_save; g_context->pack_assets_on_save = true; export_arm_run_project(); g_context->pack_assets_on_save = _pack_assets_on_save; - project_filepath = _project_filepath; + g_project->_->filepath = _project_filepath; if (box_export_h_export_player_target->i == PLAYER_TARGET_WEB) { char *start_js = string("%s/start.js", path_base); diff --git a/paint/sources/io/export_texture.c b/paint/sources/io/export_texture.c index bf6edb4c..d7ff14cb 100644 --- a/paint/sources/io/export_texture.c +++ b/paint/sources/io/export_texture.c @@ -35,8 +35,8 @@ static void export_texture_write_texture(char *file, buffer_t *pixels, i32 type, any_map_set(data_cached_images, file, image); string_array_t *ar = string_split(file, PATH_SEP); char *name = ar->buffer[ar->length - 1]; - asset_t *asset = GC_ALLOC_INIT(asset_t, {.name = name, .file = file, .id = project_asset_id++}); - any_array_push(project_assets, asset); + asset_t *asset = GC_ALLOC_INIT(asset_t, {.name = name, .file = file, .id = g_project->_->next_asset_id++}); + any_array_push(g_project->_->assets, asset); if (g_project->assets == NULL) { g_project->assets = any_array_create_from_raw((void *[]){}, 0); } @@ -175,7 +175,7 @@ static void export_texture_run_layers(char *path, slot_layer_t_array_t *layers, // Append object mask name bool export_selected = g_context->layers_export == EXPORT_MODE_SELECTED; if (export_selected && slot_layer_get_object_mask(layers->buffer[0]) > 0) { - f = string("%s_%s", f, project_paint_objects->buffer[slot_layer_get_object_mask(layers->buffer[0]) - 1]->base->name); + f = string("%s_%s", f, g_project->_->paint_objects->buffer[slot_layer_get_object_mask(layers->buffer[0]) - 1]->base->name); } if (!is_udim && !export_selected && !string_equals(object_name, "")) { f = string("%s_%s", f, object_name); @@ -203,11 +203,11 @@ static void export_texture_run_layers(char *path, slot_layer_t_array_t *layers, } 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)) { + if (is_udim && !ends_with(g_project->_->paint_objects->buffer[slot_layer_get_object_mask(l1) - 1]->base->name, object_name)) { continue; } bool per_object = g_context->layers_export == EXPORT_MODE_PER_OBJECT; - if (per_object && !string_equals(project_paint_objects->buffer[slot_layer_get_object_mask(l1) - 1]->base->name, object_name)) { + if (per_object && !string_equals(g_project->_->paint_objects->buffer[slot_layer_get_object_mask(l1) - 1]->base->name, object_name)) { continue; } } @@ -461,8 +461,8 @@ static void export_texture_run_bake_material(char *path) { g_context->pdirty = 1; u8_array_t *_visibles = u8_array_create_from_raw((u8[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; u8_array_push(_visibles, p->base->visible); p->base->visible = false; } @@ -477,8 +477,8 @@ static void export_texture_run_bake_material(char *path) { planeo->base->visible = false; g_context->paint_object = _paint_object; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - project_paint_objects->buffer[i]->base->visible = _visibles->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + g_project->_->paint_objects->buffer[i]->base->visible = _visibles->buffer[i]; } slot_layer_t_array_t *layers = any_array_create_from_raw( @@ -503,10 +503,10 @@ void export_texture_run(char *path, bool bake_material) { } else if (g_context->layers_export == EXPORT_MODE_PER_UDIM_TILE) { string_array_t *udim_tiles = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_get_object_mask(l) > 0) { - char *name = project_paint_objects->buffer[slot_layer_get_object_mask(l) - 1]->base->name; + char *name = g_project->_->paint_objects->buffer[slot_layer_get_object_mask(l) - 1]->base->name; if (string_equals(substring(name, string_length(name) - 5, 2), ".1")) { // tile.1001 any_array_push(udim_tiles, substring(name, string_length(name) - 5, string_length(name))); } @@ -515,19 +515,19 @@ void export_texture_run(char *path, bool bake_material) { if (udim_tiles->length > 0) { for (i32 i = 0; i < udim_tiles->length; ++i) { char *udim_tile = udim_tiles->buffer[i]; - export_texture_run_layers(path, project_layers, udim_tile, false); + export_texture_run_layers(path, g_project->_->layers, udim_tile, false); } } else { - export_texture_run_layers(path, project_layers, "", false); + export_texture_run_layers(path, g_project->_->layers, "", false); } } else if (g_context->layers_export == EXPORT_MODE_PER_OBJECT) { string_array_t *object_names = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_get_object_mask(l) > 0) { - char *name = project_paint_objects->buffer[slot_layer_get_object_mask(l) - 1]->base->name; + char *name = g_project->_->paint_objects->buffer[slot_layer_get_object_mask(l) - 1]->base->name; if (string_array_index_of(object_names, name) == -1) { any_array_push(object_names, name); } @@ -536,11 +536,11 @@ void export_texture_run(char *path, bool bake_material) { if (object_names->length > 0) { for (i32 i = 0; i < object_names->length; ++i) { char *name = object_names->buffer[i]; - export_texture_run_layers(path, project_layers, name, false); + export_texture_run_layers(path, g_project->_->layers, name, false); } } else { - export_texture_run_layers(path, project_layers, "", false); + export_texture_run_layers(path, g_project->_->layers, "", false); } } else { // Visible or selected @@ -568,18 +568,18 @@ void export_texture_run(char *path, bool bake_material) { continue; } slot_layer_t_array_t *layers = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; i32 mask = slot_layer_get_object_mask(l); bool add = false; if (mask == 0) { // Shared object add = true; } - else if (mask <= project_paint_objects->length) { // Specific object + else if (mask <= g_project->_->paint_objects->length) { // Specific object add = g_project->atlas_objects->buffer[mask - 1] == atlas_index; } else if (used_atlases != NULL) { // Atlas - i32 used_index = mask - project_paint_objects->length - 1; + i32 used_index = mask - g_project->_->paint_objects->length - 1; if (used_index < used_atlases->length) { add = string_array_index_of(g_project->atlas_names, used_atlases->buffer[used_index]) == atlas_index; } @@ -608,7 +608,7 @@ void export_texture_run(char *path, bool bake_material) { } } else { - layers = project_layers; + layers = g_project->_->layers; } export_texture_run_layers(path, layers, "", false); } diff --git a/paint/sources/io/import_arm.c b/paint/sources/io/import_arm.c index 32c8530a..71ae3692 100644 --- a/paint/sources/io/import_arm.c +++ b/paint/sources/io/import_arm.c @@ -18,9 +18,7 @@ void import_arm_run_mesh_on_next_frame(void *_) { } void import_arm_run_mesh(project_t *raw) { - gc_unroot(project_paint_objects); - project_paint_objects = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_paint_objects); + g_project->_->paint_objects = any_array_create_from_raw((void *[]){}, 0); for (i32 i = 0; i < raw->mesh_datas->length; ++i) { mesh_data_t *md = mesh_data_create(raw->mesh_datas->buffer[i]); mesh_object_t *object = NULL; @@ -38,7 +36,7 @@ void import_arm_run_mesh(project_t *raw) { object->base->transform->scale = (vec4_t){1, 1, 1, 1.0}; transform_build_matrix(object->base->transform); object->base->name = md->name; - any_array_push(project_paint_objects, object); + any_array_push(g_project->_->paint_objects, object); util_mesh_merge(NULL); viewport_scale_to_bounds(2.0); } @@ -56,8 +54,8 @@ void import_arm_run_material_from_project_on_next_frame(slot_material_t_array_t } bool import_arm_group_exists(ui_node_canvas_t *c) { - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; char *cname = g->canvas->name; if (string_equals(cname, c->name)) { return true; @@ -173,7 +171,7 @@ void import_arm_run_material_from_project(project_t *project, char *path) { ui_node_canvas_t *c = util_clone_canvas(project->material_nodes->buffer[i]); // project will get GCed import_arm_init_nodes(c->nodes); g_context->material = slot_material_create(m0, c); - any_array_push(project_materials, g_context->material); + any_array_push(g_project->_->materials, g_context->material); any_array_push(imported, g_context->material); history_new_material(); } @@ -189,7 +187,7 @@ void import_arm_run_material_from_project(project_t *project, char *path) { } import_arm_init_nodes(c->nodes); node_group_t *ng = GC_ALLOC_INIT(node_group_t, {.canvas = c, .nodes = ui_nodes_create()}); - any_array_push(project_material_groups, ng); + any_array_push(g_project->_->material_groups, ng); } } @@ -263,9 +261,7 @@ void import_arm_run_project(char *path) { g_context->layer_filter = 0; project_new(import_as_mesh); - gc_unroot(project_filepath); - project_filepath = string_copy(path); - gc_root(project_filepath); + g_project->_->filepath = string_copy(path); gc_unroot(ui_files_filename); ui_files_filename = string_copy(substring(path, string_last_index_of(path, PATH_SEP) + 1, string_last_index_of(path, "."))); gc_root(ui_files_filename); @@ -295,6 +291,7 @@ void import_arm_run_project(char *path) { array_insert(recent, 0, recent_path); config_save(); + project->_ = g_project->_; // Carry over runtime arrays set up by project_new gc_unroot(g_project); g_project = project; gc_root(g_project); @@ -368,13 +365,11 @@ void import_arm_run_project(char *path) { g_context->paint_object->base->transform->scale = (vec4_t){1, 1, 1, 1.0}; transform_build_matrix(g_context->paint_object->base->transform); g_context->paint_object->base->name = md->name; - gc_unroot(project_paint_objects); - project_paint_objects = any_array_create_from_raw( + g_project->_->paint_objects = any_array_create_from_raw( (void *[]){ g_context->paint_object, }, 1); - gc_root(project_paint_objects); for (i32 i = 1; i < project->mesh_datas->length; ++i) { mesh_data_t *raw = project->mesh_datas->buffer[i]; @@ -382,12 +377,12 @@ void import_arm_run_project(char *path) { mesh_object_t *object = scene_add_mesh_object(md, g_context->paint_object->material, g_context->paint_object->base); object->base->name = md->name; object->skip_context = "paint"; - any_array_push(project_paint_objects, object); + any_array_push(g_project->_->paint_objects, object); } transform_set_matrix(g_context->paint_object->base->transform, mat4_from_f32_array(project->mesh_transforms->buffer[0], 0)); for (i32 i = 1; i < project->mesh_datas->length; ++i) { - mesh_object_t *o = project_paint_objects->buffer[i]; + mesh_object_t *o = g_project->_->paint_objects->buffer[i]; transform_set_matrix(o->base->transform, mat4_from_f32_array(project->mesh_transforms->buffer[i], 0)); } @@ -410,7 +405,7 @@ void import_arm_run_project(char *path) { g_context->paint_object->skip_context = "paint"; g_context->merged_object->base->visible = true; - gpu_texture_t *tex = project_layers->buffer[0]->texpaint; + gpu_texture_t *tex = g_project->_->layers->buffer[0]->texpaint; if (tex->width != config_get_texture_res_x() || tex->height != config_get_texture_res_y()) { if (history_undo_layers != NULL) { for (i32 i = 0; i < history_undo_layers->length; ++i) { @@ -436,13 +431,11 @@ void import_arm_run_project(char *path) { g_context->brush_blend_dirty = true; } - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; slot_layer_unload(l); } - gc_unroot(project_layers); - project_layers = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_layers); + g_project->_->layers = any_array_create_from_raw((void *[]){}, 0); for (i32 i = 0; i < project->layer_datas->length; ++i) { layer_data_t *ld = project->layer_datas->buffer[i]; bool is_group = ld->texpaint == NULL; @@ -452,7 +445,7 @@ void import_arm_run_project(char *path) { l->name = string_copy(ld->name); } l->visible = ld->visible; - any_array_push(project_layers, l); + any_array_push(g_project->_->layers, l); if (!is_group) { gpu_texture_t *_texpaint = NULL; gpu_texture_t *_texpaint_nor = NULL; @@ -536,17 +529,15 @@ void import_arm_run_project(char *path) { for (i32 i = 0; i < project->layer_datas->length; ++i) { layer_data_t *ld = project->layer_datas->buffer[i]; if (ld->parent >= 0) { - project_layers->buffer[i]->parent = project_layers->buffer[ld->parent]; + g_project->_->layers->buffer[i]->parent = g_project->_->layers->buffer[ld->parent]; } } - context_set_layer(project_layers->buffer[0]); + context_set_layer(g_project->_->layers->buffer[0]); // Materials material_data_t *m0 = data_get_material("Scene", "Material"); - gc_unroot(project_materials); - project_materials = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_materials); + g_project->_->materials = any_array_create_from_raw((void *[]){}, 0); for (i32 i = 0; i < project->material_nodes->length; ++i) { ui_node_canvas_t *n = project->material_nodes->buffer[i]; import_arm_init_nodes(n->nodes); @@ -564,39 +555,35 @@ void import_arm_run_project(char *path) { g_context->material->paint_subs = md->paint_subs; g_context->material->paint_opac_mode = md->opac_mode; - any_array_push(project_materials, g_context->material); + any_array_push(g_project->_->materials, g_context->material); } ui_nodes_hwnd->redraws = 2; gc_unroot(ui_nodes_group_stack); ui_nodes_group_stack = any_array_create_from_raw((void *[]){}, 0); gc_root(ui_nodes_group_stack); - gc_unroot(project_material_groups); - project_material_groups = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_material_groups); + g_project->_->material_groups = any_array_create_from_raw((void *[]){}, 0); if (project->material_groups != NULL) { for (i32 i = 0; i < project->material_groups->length; ++i) { ui_node_canvas_t *g = project->material_groups->buffer[i]; node_group_t *ng = GC_ALLOC_INIT(node_group_t, {.canvas = g, .nodes = ui_nodes_create()}); - any_array_push(project_material_groups, ng); + any_array_push(g_project->_->material_groups, ng); } } - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; g_context->material = m; make_material_parse_paint_material(true); util_render_make_material_preview(); } - gc_unroot(project_brushes); - project_brushes = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_brushes); + g_project->_->brushes = any_array_create_from_raw((void *[]){}, 0); for (i32 i = 0; i < project->brush_nodes->length; ++i) { ui_node_canvas_t *n = project->brush_nodes->buffer[i]; import_arm_init_nodes(n->nodes); g_context->brush = slot_brush_create(n); - any_array_push(project_brushes, g_context->brush); + any_array_push(g_project->_->brushes, g_context->brush); make_material_parse_brush(); brush_output_node_parse_inputs(); util_render_make_brush_preview(); @@ -605,11 +592,11 @@ void import_arm_run_project(char *path) { // Fill layers and path layers materials for (i32 i = 0; i < project->layer_datas->length; ++i) { layer_data_t *ld = project->layer_datas->buffer[i]; - slot_layer_t *l = project_layers->buffer[i]; + slot_layer_t *l = g_project->_->layers->buffer[i]; bool is_group = ld->texpaint == NULL; if (!is_group) { - l->fill_material = ld->fill_material > -1 ? project_materials->buffer[ld->fill_material] : NULL; - l->path_material = ld->path_material > -1 ? project_materials->buffer[ld->path_material] : NULL; + l->fill_material = ld->fill_material > -1 ? g_project->_->materials->buffer[ld->fill_material] : NULL; + l->path_material = ld->path_material > -1 ? g_project->_->materials->buffer[ld->path_material] : NULL; } } @@ -678,7 +665,7 @@ void import_arm_run_brush_from_project(project_t *project, char *path) { ui_node_canvas_t *c = util_clone_canvas(project->brush_nodes->buffer[i]); import_arm_init_nodes(c->nodes); g_context->brush = slot_brush_create(c); - any_array_push(project_brushes, g_context->brush); + any_array_push(g_project->_->brushes, g_context->brush); any_array_push(imported, g_context->brush); make_material_parse_brush(); brush_output_node_parse_inputs(); diff --git a/paint/sources/io/import_asset.c b/paint/sources/io/import_asset.c index f867defb..4b284fa8 100644 --- a/paint/sources/io/import_asset.c +++ b/paint/sources/io/import_asset.c @@ -47,8 +47,8 @@ void import_asset_run(char *path, f32 drop_x, f32 drop_y, bool show_box, bool hd i32 x1 = ui_nodes_wx + ui_nodes_ww; if (ui_nodes_show && drop_x > x0 && drop_x < x1) { i32 asset_index = 0; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->file, path)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->file, path)) { asset_index = i; break; } @@ -58,7 +58,7 @@ void import_asset_run(char *path, f32 drop_x, f32 drop_y, bool show_box, bool hd ui_nodes_hwnd->redraws = 2; } - if (g_context->tool == TOOL_TYPE_COLORID && project_assets->length == 1) { + if (g_context->tool == TOOL_TYPE_COLORID && g_project->_->assets->length == 1) { ui_header_handle->redraws = 2; g_context->ddirty = 2; } diff --git a/paint/sources/io/import_folder.c b/paint/sources/io/import_folder.c index 2425e214..e7f329ce 100644 --- a/paint/sources/io/import_folder.c +++ b/paint/sources/io/import_folder.c @@ -72,8 +72,8 @@ void import_folder_run(char *path) { } // Create material - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); - any_array_push(project_materials, g_context->material); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); + any_array_push(g_project->_->materials, g_context->material); ui_nodes_t *nodes = g_context->material->nodes; ui_node_canvas_t *canvas = g_context->material->canvas; string_array_t *dirs = string_split(path, PATH_SEP); diff --git a/paint/sources/io/import_font.c b/paint/sources/io/import_font.c index a4e0d37f..2326c4e8 100644 --- a/paint/sources/io/import_font.c +++ b/paint/sources/io/import_font.c @@ -5,14 +5,14 @@ void import_font_run_on_next_frame(slot_font_t_array_t *font_slots) { for (i32 i = 0; i < font_slots->length; ++i) { slot_font_t *f = font_slots->buffer[i]; g_context->font = f; - any_array_push(project_fonts, f); + any_array_push(g_project->_->fonts, f); util_render_make_font_preview(); } } void import_font_run(char *path) { - for (i32 i = 0; i < project_fonts->length; ++i) { - slot_font_t *f = project_fonts->buffer[i]; + for (i32 i = 0; i < g_project->_->fonts->length; ++i) { + slot_font_t *f = g_project->_->fonts->buffer[i]; if (string_equals(f->file, path)) { console_info(strings_asset_already_imported()); return; diff --git a/paint/sources/io/import_mesh.c b/paint/sources/io/import_mesh.c index 91dfb0a6..0e91d9c7 100644 --- a/paint/sources/io/import_mesh.c +++ b/paint/sources/io/import_mesh.c @@ -74,20 +74,20 @@ void import_mesh_finish_import(void *_) { context_select_paint_object(context_main_object()); // No mask by default - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; p->base->visible = true; } - if (project_paint_objects->length > 1) { + if (g_project->_->paint_objects->length > 1) { // Sort by name - array_sort(project_paint_objects, &import_mesh_finish_import_sort); + array_sort(g_project->_->paint_objects, &import_mesh_finish_import_sort); // Reparent - mesh_object_t *new_parent = project_paint_objects->buffer[0]; + mesh_object_t *new_parent = g_project->_->paint_objects->buffer[0]; object_set_parent(new_parent->base, NULL); - for (i32 i = 1; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 1; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; object_set_parent(p->base, new_parent->base); } context_select_paint_object(context_main_object()); @@ -127,8 +127,8 @@ void _import_mesh_make_mesh_clear_layers(void *_) { } bool _import_mesh_is_unique_name(char *s) { - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; if (string_equals(p->base->name, s)) { return false; } @@ -168,8 +168,8 @@ void import_mesh_make_mesh(raw_mesh_t *mesh) { viewport_reset(); } - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; if (p == g_context->paint_object) { continue; } @@ -184,13 +184,11 @@ void import_mesh_make_mesh(raw_mesh_t *mesh) { mesh_object_set_data(g_context->paint_object, md); g_context->paint_object->base->name = mesh->name; - gc_unroot(project_paint_objects); - project_paint_objects = any_array_create_from_raw( + g_project->_->paint_objects = any_array_create_from_raw( (void *[]){ g_context->paint_object, }, 1); - gc_root(project_paint_objects); md->_->handle = string_copy(raw->name); any_map_set(data_cached_meshes, md->_->handle, md); @@ -206,8 +204,8 @@ void import_mesh_make_mesh(raw_mesh_t *mesh) { util_uv_dilatemap_cached = false; if (import_mesh_clear_layers) { - while (project_layers->length > 0) { - slot_layer_t *l = array_pop(project_layers); + while (g_project->_->layers->length > 0) { + slot_layer_t *l = array_pop(g_project->_->layers); slot_layer_unload(l); } layers_new_layer(false, -1, NULL); @@ -243,7 +241,7 @@ void import_mesh_add_mesh(raw_mesh_t *mesh) { object->base->name = string("%s%s", object->base->name, ext); raw->name = string("%s%s", raw->name, ext); - any_array_push(project_paint_objects, object); + any_array_push(g_project->_->paint_objects, object); md->_->handle = string_copy(raw->name); any_map_set(data_cached_meshes, md->_->handle, md); diff --git a/paint/sources/io/import_texture.c b/paint/sources/io/import_texture.c index 41b8fe3e..7d5d67d3 100644 --- a/paint/sources/io/import_texture.c +++ b/paint/sources/io/import_texture.c @@ -22,8 +22,8 @@ void import_texture_run(char *path, bool hdr_as_envmap) { } } - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *a = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *a = g_project->_->assets->buffer[i]; // Already imported if (string_equals(a->file, path)) { // Set as envmap @@ -56,8 +56,8 @@ void import_texture_run(char *path, bool hdr_as_envmap) { any_map_set(data_cached_images, path, image); string_array_t *ar = string_split(path, PATH_SEP); char *name = ar->buffer[ar->length - 1]; - asset_t *asset = GC_ALLOC_INIT(asset_t, {.name = name, .file = path, .id = project_asset_id++}); - any_array_push(project_assets, asset); + asset_t *asset = GC_ALLOC_INIT(asset_t, {.name = name, .file = path, .id = g_project->_->next_asset_id++}); + any_array_push(g_project->_->assets, asset); if (g_context->texture == NULL) { g_context->texture = asset; } diff --git a/paint/sources/main.c b/paint/sources/main.c index c4d1b9f6..7023c719 100644 --- a/paint/sources/main.c +++ b/paint/sources/main.c @@ -366,25 +366,18 @@ void _kickstart() { g_project = GC_ALLOC_INIT(project_t, {0}); gc_root(g_project); - project_assets = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_assets); + g_project->_ = gc_alloc(sizeof(project_runtime_t)); + g_project->_->filepath = ""; + g_project->_->assets = any_array_create_from_raw((void *[]){}, 0); g_project->mesh_assets = any_array_create_from_raw((void *[]){}, 0); - project_material_groups = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_material_groups); + g_project->_->material_groups = any_array_create_from_raw((void *[]){}, 0); - project_materials = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_materials); - - project_brushes = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_brushes); - - project_layers = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_layers); - - project_fonts = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_fonts); + g_project->_->materials = any_array_create_from_raw((void *[]){}, 0); + g_project->_->brushes = any_array_create_from_raw((void *[]){}, 0); + g_project->_->layers = any_array_create_from_raw((void *[]){}, 0); + g_project->_->fonts = any_array_create_from_raw((void *[]){}, 0); ui_view2d_hwnd = ui_handle_create(); gc_root(ui_view2d_hwnd); diff --git a/paint/sources/nodes_brush/brush_output_node.c b/paint/sources/nodes_brush/brush_output_node.c index 7065a0e4..8ba768e1 100644 --- a/paint/sources/nodes_brush/brush_output_node.c +++ b/paint/sources/nodes_brush/brush_output_node.c @@ -44,14 +44,14 @@ void brush_output_node_parse_inputs() { opac->_str = string_copy(substring(opac->_str, 0, string_last_index_of(opac->_str, "."))); g_context->brush_nodes_opacity = 1.0; i32 index = -1; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->name, opac->_str)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->name, opac->_str)) { index = i; break; } } if (index != -1) { - asset_t *asset = project_assets->buffer[index]; + asset_t *asset = g_project->_->assets->buffer[index]; g_context->brush_mask_image = project_get_image(asset); } } @@ -70,14 +70,14 @@ void brush_output_node_parse_inputs() { g_context->brush_stencil_image_is_alpha = ends_with(stencil->_str, ".a"); stencil->_str = string_copy(substring(stencil->_str, 0, string_last_index_of(stencil->_str, "."))); i32 index = -1; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->name, stencil->_str)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->name, stencil->_str)) { index = i; break; } } if (index != -1) { - asset_t *asset = project_assets->buffer[index]; + asset_t *asset = g_project->_->assets->buffer[index]; g_context->brush_stencil_image = project_get_image(asset); } } @@ -154,7 +154,7 @@ void brush_output_node_run() { bool started = mouse_started("left") || pen_started("tip"); // Set color pick - if (down && g_context->tool == TOOL_TYPE_COLORID && project_assets->length > 0) { + if (down && g_context->tool == TOOL_TYPE_COLORID && g_project->_->assets->length > 0) { g_context->colorid_picked = true; ui_toolbar_handle->redraws = 1; } diff --git a/paint/sources/nodes_material/bake_texture_node.c b/paint/sources/nodes_material/bake_texture_node.c index 00580809..5b9eb1a7 100644 --- a/paint/sources/nodes_material/bake_texture_node.c +++ b/paint/sources/nodes_material/bake_texture_node.c @@ -235,8 +235,8 @@ static void bake_texture_node_button(i32 node_id) { if (bake_type == BAKE_TYPE_NORMAL || bake_type == BAKE_TYPE_HEIGHT || bake_type == BAKE_TYPE_DERIVATIVE) { string_array_t *ar = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; any_array_push(ar, p->base->name); } ui_handle_t *poly_handle = ui_nest(h, 11); diff --git a/paint/sources/nodes_material/group_node.c b/paint/sources/nodes_material/group_node.c index 26b61684..3942d8f5 100644 --- a/paint/sources/nodes_material/group_node.c +++ b/paint/sources/nodes_material/group_node.c @@ -19,8 +19,8 @@ void nodes_material_new_group_button(i32 node_id) { for (i32 i = 1; i < 999; ++i) { node->name = string("%s %s", tr("Group"), i32_to_string(i)); bool found = false; - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; char *cname = g->canvas->name; if (string_equals(cname, node->name)) { found = true; @@ -78,11 +78,11 @@ void nodes_material_new_group_button(i32 node_id) { 2), .links = any_array_create_from_raw((void *[]){}, 0)}); node_group_t *ng = GC_ALLOC_INIT(node_group_t, {.canvas = canvas, .nodes = ui_nodes_create()}); - any_array_push(project_material_groups, ng); + any_array_push(g_project->_->material_groups, ng); } node_group_t *group = NULL; - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; char *cname = g->canvas->name; if (string_equals(cname, node->name)) { group = g; @@ -171,12 +171,12 @@ void nodes_material_sync_group_sockets(ui_node_canvas_t *canvas, char *group_nam void nodes_material_sync_sockets(ui_node_t *node) { node_group_t_array_t *group_stack = ui_nodes_group_stack; ui_node_canvas_t *c = group_stack->buffer[group_stack->length - 1]->canvas; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; nodes_material_sync_group_sockets(m->canvas, c->name, node); } - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; nodes_material_sync_group_sockets(g->canvas, c->name, node); } } diff --git a/paint/sources/nodes_material/material_node.c b/paint/sources/nodes_material/material_node.c index 51850d15..65bfa8ae 100644 --- a/paint/sources/nodes_material/material_node.c +++ b/paint/sources/nodes_material/material_node.c @@ -4,10 +4,10 @@ char *material_node_vector(ui_node_t *node, ui_node_socket_t *socket) { char *result = "float3(0.0, 0.0, 0.0)"; i32 mi = node->buttons->buffer[0]->default_value->buffer[0]; - if (mi >= project_materials->length) { + if (mi >= g_project->_->materials->length) { return result; } - slot_material_t *m = project_materials->buffer[mi]; + slot_material_t *m = g_project->_->materials->buffer[mi]; ui_node_t_array_t *_nodes = parser_material_nodes; ui_node_link_t_array_t *_links = parser_material_links; gc_unroot(parser_material_nodes); @@ -37,9 +37,9 @@ char *material_node_vector(ui_node_t *node, ui_node_socket_t *socket) { char *material_node_value(ui_node_t *node, ui_node_socket_t *socket) { char *result = "0.0"; i32 mi = node->buttons->buffer[0]->default_value->buffer[0]; - if (mi >= project_materials->length) + if (mi >= g_project->_->materials->length) return result; - slot_material_t *m = project_materials->buffer[mi]; + slot_material_t *m = g_project->_->materials->buffer[mi]; ui_node_t_array_t *_nodes = parser_material_nodes; ui_node_link_t_array_t *_links = parser_material_links; gc_unroot(parser_material_nodes); diff --git a/paint/sources/nodes_neural/save_image_node.c b/paint/sources/nodes_neural/save_image_node.c index 524a3150..dc0fe3d0 100644 --- a/paint/sources/nodes_neural/save_image_node.c +++ b/paint/sources/nodes_neural/save_image_node.c @@ -2,11 +2,11 @@ #include "../global.h" void save_image_node_run(ui_node_t *node, gpu_texture_t *result) { - if (string_equals(project_filepath, "")) { + if (string_equals(g_project->_->filepath, "")) { return; } - char *dir = substring(project_filepath, 0, string_last_index_of(project_filepath, PATH_SEP) + 1); + char *dir = substring(g_project->_->filepath, 0, string_last_index_of(g_project->_->filepath, PATH_SEP) + 1); i32 n = 1; char *file; do { diff --git a/paint/sources/parser_material.c b/paint/sources/parser_material.c index b91aafb8..f9276884 100644 --- a/paint/sources/parser_material.c +++ b/paint/sources/parser_material.c @@ -311,8 +311,8 @@ void parser_material_finalize(node_shader_context_t *con) { } ui_node_canvas_t *parser_material_get_group(char *name) { - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; if (string_equals(g->canvas->name, name)) { return g->canvas; } @@ -581,8 +581,8 @@ char *parser_material_node_name(ui_node_t *node, ui_node_t_array_t *_parents) { } char *parser_material_enum_data(char *s) { - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *a = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *a = g_project->_->assets->buffer[i]; if (string_equals(a->name, s)) { return a->file; } diff --git a/paint/sources/physics_sim.c b/paint/sources/physics_sim.c index 7fd772f3..bef2575e 100644 --- a/paint/sources/physics_sim.c +++ b/paint/sources/physics_sim.c @@ -50,12 +50,12 @@ void sim_play() { sim_running = true; if (sim_record) { - if (string_equals(project_filepath, "")) { + if (string_equals(g_project->_->filepath, "")) { console_error(tr("Save project first")); sim_record = false; return; } - char *path = string("%s/output.mp4", path_base_dir(project_filepath)); + char *path = string("%s/output.mp4", path_base_dir(g_project->_->filepath)); render_target_t *rt = any_map_get(render_path_render_targets, "last"); // iron_mp4_begin(path, rt._image.width, rt._image.height); } @@ -64,7 +64,7 @@ void sim_play() { gc_unroot(sim_transforms); sim_transforms = any_array_create_from_raw((void *[]){}, 0); gc_root(sim_transforms); - mesh_object_t_array_t *pos = project_paint_objects; + mesh_object_t_array_t *pos = g_project->_->paint_objects; for (i32 i = 0; i < pos->length; ++i) { mat4_t *m = gc_alloc(sizeof(mat4_t)); memcpy(m->m, pos->buffer[i]->base->transform->local.m, sizeof(m->m)); @@ -80,7 +80,7 @@ void sim_stop() { } // Restore transforms - mesh_object_t_array_t *pos = project_paint_objects; + mesh_object_t_array_t *pos = g_project->_->paint_objects; for (i32 i = 0; i < pos->length; ++i) { transform_set_matrix(pos->buffer[i]->base->transform, *(mat4_t *)sim_transforms->buffer[i]); physics_body_t *pb = any_imap_get(physics_body_object_map, pos->buffer[i]->base->uid); @@ -110,7 +110,7 @@ void sim_duplicate() { mesh_object_t *so = g_context->selected_object->ext; mesh_object_t *dup = scene_add_mesh_object(so->data, so->material, so->base->parent); transform_set_matrix(dup->base->transform, so->base->transform->local); - any_array_push(project_paint_objects, dup); + any_array_push(g_project->_->paint_objects, dup); dup->base->name = so->base->name; // Physics @@ -125,7 +125,7 @@ void sim_duplicate() { void sim_delete() { mesh_object_t *so = g_context->selected_object->ext; - array_remove(project_paint_objects, so); + array_remove(g_project->_->paint_objects, so); mesh_object_remove(so); physics_body_t *pb = any_imap_get(physics_body_object_map, so->base->uid); sim_remove_body(pb); diff --git a/paint/sources/project.c b/paint/sources/project.c index 50ffc37f..7b166f86 100644 --- a/paint/sources/project.c +++ b/paint/sources/project.c @@ -42,17 +42,13 @@ void project_save_on_next_frame(void *_) { } void project_save(bool save_and_quit) { - if (string_equals(project_filepath, "")) { + if (string_equals(g_project->_->filepath, "")) { #ifdef IRON_IOS char *document_directory = iron_save_dialog("", ""); document_directory = string_copy(substring(document_directory, 0, string_length(document_directory) - 8)); // Strip /"untitled" - gc_unroot(project_filepath); - project_filepath = string("%s/%s.arm", document_directory, sys_title()); - gc_root(project_filepath); + g_project->_->filepath = string("%s/%s.arm", document_directory, sys_title()); #elif defined(IRON_ANDROID) - gc_unroot(project_filepath); - project_filepath = string("%s/%s.arm", iron_internal_save_path(), sys_title()); - gc_root(project_filepath); + g_project->_->filepath = string("%s/%s.arm", iron_internal_save_path(), sys_title()); #else project_save_as(save_and_quit); return; @@ -60,7 +56,7 @@ void project_save(bool save_and_quit) { } #if defined(IRON_WINDOWS) || defined(IRON_LINUX) || defined(IRON_MACOS) - char *filename = substring(project_filepath, string_last_index_of(project_filepath, PATH_SEP) + 1, string_length(project_filepath) - 4); + char *filename = substring(g_project->_->filepath, string_last_index_of(g_project->_->filepath, PATH_SEP) + 1, string_length(g_project->_->filepath) - 4); sys_title_set(string("%s - %s", filename, manifest_title)); #endif @@ -74,13 +70,9 @@ void project_save_as_on_file_picked(char *path) { if (string_equals(f, "")) { f = string_copy(tr("untitled")); } - gc_unroot(project_filepath); - project_filepath = string("%s%s%s", path, PATH_SEP, f); - gc_root(project_filepath); - if (!ends_with(project_filepath, ".arm")) { - gc_unroot(project_filepath); - project_filepath = string("%s.arm", project_filepath); - gc_root(project_filepath); + g_project->_->filepath = string("%s%s%s", path, PATH_SEP, f); + if (!ends_with(g_project->_->filepath, ".arm")) { + g_project->_->filepath = string("%s.arm", g_project->_->filepath); } project_save(_project_save_and_quit); } @@ -91,16 +83,16 @@ void project_save_as(bool save_and_quit) { } void project_fetch_default_meshes() { - if (project_mesh_list == NULL) { - gc_unroot(project_mesh_list); - project_mesh_list = file_read_directory(string("%s%smeshes", path_data(), PATH_SEP)); - gc_root(project_mesh_list); - for (i32 i = 0; i < project_mesh_list->length; ++i) { - char *s = project_mesh_list->buffer[i]; - project_mesh_list->buffer[i] = substring(project_mesh_list->buffer[i], 0, string_length(s) - 4); // Trim .arm + if (project_default_mesh_list == NULL) { + gc_unroot(project_default_mesh_list); + project_default_mesh_list = file_read_directory(string("%s%smeshes", path_data(), PATH_SEP)); + gc_root(project_default_mesh_list); + for (i32 i = 0; i < project_default_mesh_list->length; ++i) { + char *s = project_default_mesh_list->buffer[i]; + project_default_mesh_list->buffer[i] = substring(project_default_mesh_list->buffer[i], 0, string_length(s) - 4); // Trim .arm } - any_array_push(project_mesh_list, "plane"); - any_array_push(project_mesh_list, "sphere"); + any_array_push(project_default_mesh_list, "plane"); + any_array_push(project_default_mesh_list, "sphere"); } } @@ -109,7 +101,7 @@ void project_new_box_draw() { ui_handle_t *h_project_type = ui_handle(__ID__); h_project_type->i = g_context->project_type; - g_context->project_type = ui_combo(h_project_type, project_mesh_list, tr("Template"), true, UI_ALIGN_LEFT, true); + g_context->project_type = ui_combo(h_project_type, project_default_mesh_list, tr("Template"), true, UI_ALIGN_LEFT, true); ui_end_element(); ui_row2(); if (ui_icon_button(tr("Cancel"), ICON_CLOSE, UI_ALIGN_CENTER)) { @@ -132,9 +124,9 @@ void project_cleanup() { g_context->merged_object = NULL; } - if (project_paint_objects != NULL) { - for (i32 i = 1; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + if (g_project->_->paint_objects != NULL) { + for (i32 i = 1; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; if (p == g_context->paint_object) { continue; } @@ -148,8 +140,8 @@ void project_cleanup() { data_delete_mesh(handle); } - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *a = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *a = g_project->_->assets->buffer[i]; data_delete_image(a->file); } } @@ -171,14 +163,12 @@ void project_new_resize_layers(void *_) { void project_new(bool reset_layers) { if (g_context->paint_object != NULL) { project_cleanup(); - gc_unroot(project_filepath); - project_filepath = ""; - gc_root(project_filepath); + g_project->_->filepath = ""; } - if (project_layers->length == 0) { - any_array_push(project_layers, slot_layer_create("", LAYER_SLOT_TYPE_LAYER, NULL)); - g_context->layer = project_layers->buffer[0]; + if (g_project->_->layers->length == 0) { + any_array_push(g_project->_->layers, slot_layer_create("", LAYER_SLOT_TYPE_LAYER, NULL)); + g_context->layer = g_project->_->layers->buffer[0]; } g_context->layer_preview_dirty = true; @@ -187,7 +177,7 @@ void project_new(bool reset_layers) { g_project->mesh_assets = any_array_create_from_raw((void *[]){}, 0); mesh_data_t *raw = NULL; - char *mesh_name = project_mesh_list == NULL ? "box_bevel" : project_mesh_list->buffer[g_context->project_type]; + char *mesh_name = project_default_mesh_list == NULL ? "box_bevel" : project_default_mesh_list->buffer[g_context->project_type]; if (string_equals(mesh_name, "sphere")) { raw_mesh_t *mesh = geom_make_uv_sphere(1, 512, 256, true, 1.0); @@ -225,13 +215,11 @@ void project_new(bool reset_layers) { mesh_object_set_data(g_context->paint_object, md); } - gc_unroot(project_paint_objects); - project_paint_objects = any_array_create_from_raw( + g_project->_->paint_objects = any_array_create_from_raw( (void *[]){ g_context->paint_object, }, 1); - gc_root(project_paint_objects); g_context->paint_object = context_main_object(); context_select_paint_object(context_main_object()); @@ -239,36 +227,30 @@ void project_new(bool reset_layers) { transform_build_matrix(g_context->paint_object->base->transform); g_context->paint_object->base->name = "Tessellated"; - while (project_materials->length > 0) { - slot_material_unload(array_pop(project_materials)); + while (g_project->_->materials->length > 0) { + slot_material_unload(array_pop(g_project->_->materials)); } - any_array_push(project_materials, slot_material_create(m, NULL)); + any_array_push(g_project->_->materials, slot_material_create(m, NULL)); g_context->picker_mask = PICKER_MASK_NONE; - g_context->material = project_materials->buffer[0]; + g_context->material = g_project->_->materials->buffer[0]; ui_nodes_hwnd->redraws = 2; gc_unroot(ui_nodes_group_stack); ui_nodes_group_stack = any_array_create_from_raw((void *[]){}, 0); gc_root(ui_nodes_group_stack); - gc_unroot(project_material_groups); - project_material_groups = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_material_groups); - gc_unroot(project_brushes); - project_brushes = any_array_create_from_raw( + g_project->_->material_groups = any_array_create_from_raw((void *[]){}, 0); + g_project->_->brushes = any_array_create_from_raw( (void *[]){ slot_brush_create(NULL), }, 1); - gc_root(project_brushes); - g_context->brush = project_brushes->buffer[0]; - gc_unroot(project_fonts); - project_fonts = any_array_create_from_raw( + g_context->brush = g_project->_->brushes->buffer[0]; + g_project->_->fonts = any_array_create_from_raw( (void *[]){ slot_font_create("default.ttf", base_font, ""), }, 1); - gc_root(project_fonts); - g_context->font = project_fonts->buffer[0]; + g_context->font = g_project->_->fonts->buffer[0]; project_set_default_swatches(); g_context->swatch = g_project->swatches->buffer[0]; g_context->picked_color = project_make_swatch(0xffffffff); @@ -279,23 +261,21 @@ void project_new(bool reset_layers) { make_material_parse_paint_material(true); make_material_parse_brush(); - gc_unroot(project_assets); - project_assets = any_array_create_from_raw((void *[]){}, 0); - gc_root(project_assets); - project_asset_id = 0; + g_project->_->assets = any_array_create_from_raw((void *[]){}, 0); + g_project->_->next_asset_id = 0; g_project->packed_assets = any_array_create_from_raw((void *[]){}, 0); g_context->ddirty = 4; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2; ui_base_hwnds->buffer[TAB_AREA_SIDEBAR1]->redraws = 2; if (reset_layers) { - bool res_changed = project_layers->buffer[0]->texpaint->width != config_get_texture_res_x() || - project_layers->buffer[0]->texpaint->height != config_get_texture_res_y(); - while (project_layers->length > 0) { - slot_layer_unload(array_pop(project_layers)); + bool res_changed = g_project->_->layers->buffer[0]->texpaint->width != config_get_texture_res_x() || + g_project->_->layers->buffer[0]->texpaint->height != config_get_texture_res_y(); + while (g_project->_->layers->length > 0) { + slot_layer_unload(array_pop(g_project->_->layers)); } slot_layer_t *layer = slot_layer_create("", LAYER_SLOT_TYPE_LAYER, NULL); - any_array_push(project_layers, layer); + any_array_push(g_project->_->layers, layer); context_set_layer(layer); if (res_changed) { sys_notify_on_next_frame(&project_new_resize_layers, NULL); @@ -356,8 +336,8 @@ void project_import_brush_on_file_picked(char *path) { // Import texture import_asset_run(path, -1.0, -1.0, true, true, NULL); i32 asset_index = 0; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->file, path)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->file, path)) { asset_index = i; break; } @@ -365,7 +345,7 @@ void project_import_brush_on_file_picked(char *path) { // Create a new brush g_context->brush = slot_brush_create(NULL); - any_array_push(project_brushes, g_context->brush); + any_array_push(g_project->_->brushes, g_context->brush); // Create and link image node ui_node_t *n = nodes_brush_create_node("TEX_IMAGE"); @@ -566,8 +546,8 @@ void project_import_swatches(bool replace_existing) { } void project_reimport_textures() { - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *asset = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *asset = g_project->_->assets->buffer[i]; project_reimport_texture(asset); } } @@ -580,15 +560,15 @@ void project_reimport_texture_load_on_next_frame(void *_) { void project_reimport_texture_load(char *path, asset_t *asset) { asset->file = string_copy(path); - i32 i = array_index_of(project_assets, asset); + i32 i = array_index_of(g_project->_->assets, asset); data_delete_image(asset->file); - asset_t *old_asset = project_assets->buffer[i]; - array_splice(project_assets, i, 1); + asset_t *old_asset = g_project->_->assets->buffer[i]; + array_splice(g_project->_->assets, i, 1); import_texture_run(asset->file, true); - array_insert(project_assets, i, array_pop(project_assets)); + array_insert(g_project->_->assets, i, array_pop(g_project->_->assets)); if (g_context->texture == old_asset) { - g_context->texture = project_assets->buffer[i]; + g_context->texture = g_project->_->assets->buffer[i]; } sys_notify_on_next_frame(&project_reimport_texture_load_on_next_frame, NULL); @@ -615,6 +595,10 @@ gpu_texture_t *project_get_image(asset_t *asset) { return asset != NULL ? asset->image : NULL; } +asset_t_array_t *project_get_assets() { + return g_project->_->assets; +} + string_array_t *project_get_used_atlases() { if (g_project->atlas_objects == NULL) { return NULL; @@ -639,26 +623,26 @@ string_array_t *project_get_used_atlases() { } bool project_is_atlas_object(mesh_object_t *p) { - if (g_context->layer_filter <= project_paint_objects->length) { + if (g_context->layer_filter <= g_project->_->paint_objects->length) { return false; } - char *atlas_name = project_get_used_atlases()->buffer[g_context->layer_filter - project_paint_objects->length - 1]; + char *atlas_name = project_get_used_atlases()->buffer[g_context->layer_filter - g_project->_->paint_objects->length - 1]; i32 atlas_i = string_array_index_of(g_project->atlas_names, atlas_name); - return atlas_i == g_project->atlas_objects->buffer[array_index_of(project_paint_objects, p)]; + return atlas_i == g_project->atlas_objects->buffer[array_index_of(g_project->_->paint_objects, p)]; } mesh_object_t_array_t *project_get_atlas_objects(i32 object_mask) { string_array_t *atlases = project_get_used_atlases(); - i32 i = object_mask - project_paint_objects->length - 1; + i32 i = object_mask - g_project->_->paint_objects->length - 1; if (atlases == NULL || i >= atlases->length) { - return project_paint_objects; + return g_project->_->paint_objects; } char *atlas_name = atlases->buffer[i]; i32 atlas_i = string_array_index_of(g_project->atlas_names, atlas_name); mesh_object_t_array_t *visibles = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { if (g_project->atlas_objects->buffer[i] == atlas_i) { - any_array_push(visibles, project_paint_objects->buffer[i]); + any_array_push(visibles, g_project->_->paint_objects->buffer[i]); } } return visibles; @@ -730,8 +714,8 @@ void project_set_default_swatches() { } node_group_t *project_get_material_group_by_name(char *group_name) { - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; if (string_equals(g->canvas->name, group_name)) { return g; } @@ -741,12 +725,12 @@ node_group_t *project_get_material_group_by_name(char *group_name) { bool project_is_material_group_in_use(node_group_t *group) { ui_node_canvas_t_array_t *canvases = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; any_array_push(canvases, m->canvas); } - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *m = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *m = g_project->_->material_groups->buffer[i]; any_array_push(canvases, m->canvas); } for (i32 i = 0; i < canvases->length; ++i) { diff --git a/paint/sources/render/make_depth.c b/paint/sources/render/make_depth.c index 052ab264..0801c74c 100644 --- a/paint/sources/render/make_depth.c +++ b/paint/sources/render/make_depth.c @@ -31,8 +31,8 @@ node_shader_context_t *make_depth_run(material_t *data, material_context_t *matc // kong->vert_n = true; // node_shader_write_vert(kong, "var height: float = 0.0;"); // i32 num_layers = 0; - // for (i32 i = 0; i < project_layers->length; ++i) { - // slot_layer_t *l = project_layers->buffer[i]; + // for (i32 i = 0; i < g_project->_->layers->length; ++i) { + // slot_layer_t *l = g_project->_->layers->buffer[i]; // if (!slot_layer_is_visible(l) || !l->paint_height || !slot_layer_is_layer(l)) { // continue; // } @@ -63,8 +63,8 @@ node_shader_context_t *make_depth_run(material_t *data, material_context_t *matc // { // slot_layer_t_array_t *sculpt_layers = any_array_create_from_raw((void *[]){}, 0); // i32_array_t *sculpt_indices = i32_array_create(0); - // for (i32 i = 0; i < project_layers->length; ++i) { - // slot_layer_t *l = project_layers->buffer[i]; + // for (i32 i = 0; i < g_project->_->layers->length; ++i) { + // slot_layer_t *l = g_project->_->layers->buffer[i]; // if (l->texpaint_sculpt != NULL && slot_layer_is_visible(l)) { // any_array_push(sculpt_layers, l); // i32_array_push(sculpt_indices, i); diff --git a/paint/sources/render/make_material.c b/paint/sources/render/make_material.c index e7100783..367c35df 100644 --- a/paint/sources/render/make_material.c +++ b/paint/sources/render/make_material.c @@ -26,7 +26,7 @@ void make_material_delete_context(shader_context_t *c) { } void make_material_parse_mesh_material() { - material_data_t *m = project_materials->buffer[0]->data; + material_data_t *m = g_project->_->materials->buffer[0]->data; for (i32 i = 0; i < m->_->shader->contexts->length; ++i) { shader_context_t *c = m->_->shader->contexts->buffer[i]; @@ -98,7 +98,7 @@ void make_material_parse_mesh_preview_material() { return; } - material_data_t *m = project_materials->buffer[0]->data; + material_data_t *m = g_project->_->materials->buffer[0]->data; shader_context_t *scon = NULL; for (i32 i = 0; i < m->_->shader->contexts->length; ++i) { shader_context_t *c = m->_->shader->contexts->buffer[i]; @@ -243,8 +243,8 @@ void make_material_traverse_nodes(ui_node_t_array_t *nodes, ui_node_canvas_t *gr ui_node_t *node = nodes->buffer[i]; make_material_bake_node_preview(node, group, parents); if (string_equals(node->type, "GROUP")) { - for (i32 j = 0; j < project_material_groups->length; ++j) { - node_group_t *g = project_material_groups->buffer[j]; + for (i32 j = 0; j < g_project->_->material_groups->length; ++j) { + node_group_t *g = g_project->_->material_groups->buffer[j]; char *cname = g->canvas->name; if (string_equals(cname, node->name)) { any_array_push(parents, node); @@ -291,7 +291,7 @@ void make_material_parse_paint_material(bool bake_previews) { draw_begin(current, false, 0); } - material_data_t *m = project_materials->buffer[0]->data; + material_data_t *m = g_project->_->materials->buffer[0]->data; for (i32 i = 0; i < m->_->shader->contexts->length; ++i) { shader_context_t *c = m->_->shader->contexts->buffer[i]; if (string_equals(c->name, "paint")) { @@ -343,7 +343,7 @@ void make_material_parse_paint_material(bool bake_previews) { } void make_material_save_paint_material() { - material_data_t *m = project_materials->buffer[0]->data; + material_data_t *m = g_project->_->materials->buffer[0]->data; for (i32 i = 0; i < m->_->shader->contexts->length; ++i) { shader_context_t *c = m->_->shader->contexts->buffer[i]; if (string_equals(c->name, "paint")) { @@ -368,7 +368,7 @@ void make_material_restore_paint_material() { if (make_material_saved_scon == NULL) { return; } - material_data_t *m = project_materials->buffer[0]->data; + material_data_t *m = g_project->_->materials->buffer[0]->data; for (i32 i = 0; i < m->_->shader->contexts->length; ++i) { shader_context_t *c = m->_->shader->contexts->buffer[i]; if (string_equals(c->name, "paint")) { @@ -516,7 +516,7 @@ f32 make_material_get_displace_strength() { } void make_material_parse_depth_material() { - material_data_t *m = project_materials->buffer[0]->data; + material_data_t *m = g_project->_->materials->buffer[0]->data; for (i32 i = 0; i < m->_->shader->contexts->length; ++i) { shader_context_t *c = m->_->shader->contexts->buffer[i]; diff --git a/paint/sources/render/make_mesh.c b/paint/sources/render/make_mesh.c index 90be650e..68298e9f 100644 --- a/paint/sources/render/make_mesh.c +++ b/paint/sources/render/make_mesh.c @@ -119,8 +119,8 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { kong->vert_n = true; node_shader_write_vert(kong, "var height: float = 0.0;"); i32 num_layers = 0; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (!slot_layer_is_visible(l) || !l->paint_height || !slot_layer_is_layer(l)) { continue; } @@ -165,8 +165,8 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { { slot_layer_t_array_t *sculpt_layers = any_array_create_from_raw((void *[]){}, 0); i32_array_t *sculpt_indices = i32_array_create(0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->texpaint_sculpt != NULL && slot_layer_is_visible(l)) { any_array_push(sculpt_layers, l); i32_array_push(sculpt_indices, i); @@ -242,7 +242,7 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { continue; } texture_count++; - i32 index = array_index_of(project_layers, m); + i32 index = array_index_of(g_project->_->layers, m); node_shader_add_texture(kong, string("texpaint_view_mask%s", i32_to_string(m->id)), string("_texpaint%s", i32_to_string(index))); } } @@ -262,8 +262,8 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { slot_layer_t_array_t *layers = any_array_create_from_raw((void *[]){}, 0); i32 start_count = texture_count; bool is_material_tool = g_context->tool == TOOL_TYPE_MATERIAL; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (is_material_tool && l != g_context->layer) { continue; } @@ -301,7 +301,7 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { slot_layer_t *l = layers->buffer[i]; if (slot_layer_get_object_mask(l) > 0) { node_shader_add_constant(kong, "uid: int", "_uid"); - if (slot_layer_get_object_mask(l) > project_paint_objects->length) { // Atlas + if (slot_layer_get_object_mask(l) > g_project->_->paint_objects->length) { // Atlas mesh_object_t_array_t *visibles = project_get_atlas_objects(slot_layer_get_object_mask(l)); node_shader_write_frag(kong, "if ("); for (i32 i = 0; i < visibles->length; ++i) { @@ -314,7 +314,7 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { node_shader_write_frag(kong, ") {"); } else { // Object mask - i32 uid = project_paint_objects->buffer[slot_layer_get_object_mask(l) - 1]->base->uid; + i32 uid = g_project->_->paint_objects->buffer[slot_layer_get_object_mask(l) - 1]->base->uid; node_shader_write_frag(kong, string("if (%s == constants.uid) {", i32_to_string(uid))); } } @@ -373,7 +373,7 @@ node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass) { } if (l->paint_base) { - if (l == project_layers->buffer[0]) { + if (l == g_project->_->layers->buffer[0]) { node_shader_write_frag(kong, "basecol = texpaint_sample.rgb * texpaint_opac;"); } else { diff --git a/paint/sources/render/make_paint.c b/paint/sources/render/make_paint.c index 4e5ec886..0d85d90f 100644 --- a/paint/sources/render/make_paint.c +++ b/paint/sources/render/make_paint.c @@ -597,8 +597,8 @@ node_shader_context_t *make_paint_run(material_t *data, material_context_t *matc { slot_layer_t_array_t *sculpt_layers = any_array_create_from_raw((void *[]){}, 0); i32_array_t *sculpt_indices = i32_array_create(0); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->texpaint_sculpt != NULL && slot_layer_is_visible(l)) { any_array_push(sculpt_layers, l); i32_array_push(sculpt_indices, i); diff --git a/paint/sources/render/make_sculpt.c b/paint/sources/render/make_sculpt.c index d6dcfc10..761a0a9b 100644 --- a/paint/sources/render/make_sculpt.c +++ b/paint/sources/render/make_sculpt.c @@ -294,8 +294,8 @@ void sculpt_init_sculpt_texture(slot_layer_t *l, mesh_data_t *md) { sculpt_import_mesh_pack_to_texture(md, l->texpaint_sculpt); i32 sculpt_layer_count = 0; - for (i32 i = 0; i < project_layers->length; ++i) { - if (project_layers->buffer[i]->texpaint_sculpt != NULL) { + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + if (g_project->_->layers->buffer[i]->texpaint_sculpt != NULL) { sculpt_layer_count++; } } @@ -430,7 +430,7 @@ void render_path_sculpt_commands() { material_context_t *material_context = NULL; shader_context_t *shader_context = NULL; - material_data_t *mat = project_paint_objects->buffer[0]->material; + material_data_t *mat = g_project->_->paint_objects->buffer[0]->material; for (i32 j = 0; j < mat->contexts->length; ++j) { if (string_equals(mat->contexts->buffer[j]->name, "paint")) { shader_context = shader_data_get_context(mat->_->shader, "paint"); @@ -441,7 +441,7 @@ void render_path_sculpt_commands() { gpu_set_pipeline(shader_context->_->pipe); uniforms_set_context_consts(shader_context, _render_path_bind_params); - uniforms_set_obj_consts(shader_context, project_paint_objects->buffer[0]->base); + uniforms_set_obj_consts(shader_context, g_project->_->paint_objects->buffer[0]->base); uniforms_set_material_consts(shader_context, material_context); gpu_set_vertex_buffer(const_data_screen_aligned_vb); gpu_set_index_buffer(const_data_screen_aligned_ib); @@ -473,7 +473,7 @@ void slot_layer_apply_sculpt(slot_layer_t *raw) { return; } - mesh_object_t *o = project_paint_objects->buffer[0]; + mesh_object_t *o = g_project->_->paint_objects->buffer[0]; mesh_data_t *g = o->data; i16_array_t *va0 = g->vertex_arrays->buffer[0]->values; i32 num_verts = math_floor(va0->length / 4.0); diff --git a/paint/sources/render/render_path_paint.c b/paint/sources/render/render_path_paint.c index 37471edd..a08c2f76 100644 --- a/paint/sources/render/render_path_paint.c +++ b/paint/sources/render/render_path_paint.c @@ -299,8 +299,8 @@ void render_path_paint_commands_paint(bool dilation) { // matid % 3 == 0 - normal, 1 - emission, 2 - subsurface i32 id = buffer_get_u8(b, 3); i32 matid = math_floor((id - (id % 3)) / 3.0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; if (m->id == matid) { context_set_material(m); g_context->materialid_picked = matid; @@ -312,8 +312,8 @@ void render_path_paint_commands_paint(bool dilation) { // Update fill layers which are using materials containing a PICKER node slot_material_t *_material = g_context->material; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; bool has_picker = false; for (i32 j = 0; j < m->canvas->nodes->length; ++j) { ui_node_t *node = m->canvas->nodes->buffer[j]; @@ -357,8 +357,8 @@ void render_path_paint_commands_paint(bool dilation) { i32 r_byte = buffer_get_u8(pixel, 0); #endif i32 index = r_byte - 1; - if (index >= 0 && index < project_paint_objects->length) { - g_context->paint_object = project_paint_objects->buffer[index]; + if (index >= 0 && index < g_project->_->paint_objects->length) { + g_context->paint_object = g_project->_->paint_objects->buffer[index]; // g_context->layer->object_mask = index + 1; // context_set_layer(g_context->layer); @@ -434,8 +434,8 @@ void render_path_paint_commands_paint(bool dilation) { render_path_bind_target("gbuffer2", "gbuffer2"); } i32 sculpt_layer_count = 0; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *sl = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *sl = g_project->_->layers->buffer[i]; if (sl->texpaint_sculpt != NULL && slot_layer_is_visible(sl)) { render_path_bind_target(string("texpaint_sculpt%d", sl->id), string("texpaint_sculpt%d", sl->id)); sculpt_layer_count++; @@ -762,7 +762,7 @@ bool render_path_paint_paint_enabled() { // Skip paint if material references this layer and wants to paint into it at the same time bool self_in_material = false; - i32 layer_i = array_index_of(project_layers, g_context->layer); + i32 layer_i = array_index_of(g_project->_->layers, g_context->layer); ui_node_t_array_t *nodes = g_context->material->canvas->nodes; for (i32 i = 0; i < nodes->length; ++i) { ui_node_t *n = nodes->buffer[i]; @@ -902,7 +902,7 @@ void render_path_paint_draw() { g_context->bake_type = g_context->bake_type == BAKE_TYPE_NORMAL ? BAKE_TYPE_NORMAL_OBJECT : BAKE_TYPE_POSITION; // Bake high poly data make_material_parse_paint_material(false); mesh_object_t *_paint_object = g_context->paint_object; - mesh_object_t *high_poly = project_paint_objects->buffer[g_context->bake_high_poly]; + mesh_object_t *high_poly = g_project->_->paint_objects->buffer[g_context->bake_high_poly]; bool _visible = high_poly->base->visible; high_poly->base->visible = true; context_select_paint_object(high_poly); @@ -931,8 +931,8 @@ void render_path_paint_draw() { g_context->merged_object->base->visible = false; } - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; context_select_paint_object(p); render_path_paint_commands_paint(true); } @@ -975,8 +975,8 @@ void render_path_paint_set_plane_mesh() { gc_unroot(render_path_paint_visibles); render_path_paint_visibles = u8_array_create_from_raw((u8[]){}, 0); gc_root(render_path_paint_visibles); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; u8_array_push(render_path_paint_visibles, p->base->visible); p->base->visible = false; } @@ -1085,8 +1085,8 @@ void render_path_paint_restore_plane_mesh() { g_context->paint2d_view = false; render_path_paint_planeo->base->visible = false; render_path_paint_planeo->base->transform->loc = (vec4_t){0.0, 0.0, 0.0, 1.0}; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - project_paint_objects->buffer[i]->base->visible = render_path_paint_visibles->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + g_project->_->paint_objects->buffer[i]->base->visible = render_path_paint_visibles->buffer[i]; } if (g_context->merged_object != NULL) { g_context->merged_object->base->visible = render_path_paint_merged_object_visible; @@ -1108,8 +1108,8 @@ void render_path_paint_bind_layers() { render_path_paint_use_live_layer(true); } - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; render_path_bind_target(string("texpaint%d", l->id), string("texpaint%d", l->id)); if (slot_layer_is_layer(l)) { diff --git a/paint/sources/render/render_path_raytrace.c b/paint/sources/render/render_path_raytrace.c index 3e6fe93e..42b1071f 100644 --- a/paint/sources/render/render_path_raytrace.c +++ b/paint/sources/render/render_path_raytrace.c @@ -160,8 +160,8 @@ void render_path_raytrace_raytrace_init(char *shader_name, bool build) { _gpu_raytrace_as_init(); // if (g_context->tool == TOOL_TYPE_CURSOR) { - // for (i32 i = 0; i < project_paint_objects->length; ++i) { - // mesh_object_t *po = project_paint_objects->buffer[i]; + // for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + // mesh_object_t *po = g_project->_->paint_objects->buffer[i]; // if (!po->base->visible) { // continue; // } diff --git a/paint/sources/slot_brush.c b/paint/sources/slot_brush.c index c02c6af0..c1d15d8d 100644 --- a/paint/sources/slot_brush.c +++ b/paint/sources/slot_brush.c @@ -9,8 +9,8 @@ slot_brush_t *slot_brush_create(ui_node_canvas_t *c) { raw->preview_ready = false; raw->id = 0; - for (i32 i = 0; i < project_brushes->length; ++i) { - slot_brush_t *brush = project_brushes->buffer[i]; + for (i32 i = 0; i < g_project->_->brushes->length; ++i) { + slot_brush_t *brush = g_project->_->brushes->buffer[i]; if (brush->id >= raw->id) { raw->id = brush->id + 1; } diff --git a/paint/sources/slot_font.c b/paint/sources/slot_font.c index 2bae18a1..399ced92 100644 --- a/paint/sources/slot_font.c +++ b/paint/sources/slot_font.c @@ -6,8 +6,8 @@ slot_font_t *slot_font_create(char *name, draw_font_t *font, char *file) { raw->preview_ready = false; raw->id = 0; - for (i32 i = 0; i < project_fonts->length; ++i) { - slot_font_t *slot = project_fonts->buffer[i]; + for (i32 i = 0; i < g_project->_->fonts->length; ++i) { + slot_font_t *slot = g_project->_->fonts->buffer[i]; if (slot->id >= raw->id) { raw->id = slot->id + 1; } diff --git a/paint/sources/slot_layer.c b/paint/sources/slot_layer.c index 7d791e61..6be45818 100644 --- a/paint/sources/slot_layer.c +++ b/paint/sources/slot_layer.c @@ -42,8 +42,8 @@ slot_layer_t *slot_layer_create(char *ext, layer_slot_type_t type, slot_layer_t if (string_equals(ext, "")) { raw->id = 0; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->id >= raw->id) { raw->id = l->id + 1; } @@ -145,11 +145,11 @@ void slot_layer_delete(slot_layer_t *raw) { } } - i32 lpos = array_index_of(project_layers, raw); - array_remove(project_layers, raw); + i32 lpos = array_index_of(g_project->_->layers, raw); + array_remove(g_project->_->layers, raw); // Undo can remove base layer and then restore it from undo layers - if (project_layers->length > 0) { - context_set_layer(project_layers->buffer[lpos > 0 ? lpos - 1 : 0]); + if (g_project->_->layers->length > 0) { + context_set_layer(g_project->_->layers->buffer[lpos > 0 ? lpos - 1 : 0]); } // Do not remove empty groups if the last layer is deleted as this prevents redo from working properly @@ -297,7 +297,7 @@ void slot_layer_apply_mask(slot_layer_t *raw) { } slot_layer_t *slot_layer_duplicate(slot_layer_t *raw) { - slot_layer_t_array_t *layers = project_layers; + slot_layer_t_array_t *layers = g_project->_->layers; i32 i = array_index_of(layers, raw) + 1; slot_layer_t *l = slot_layer_create("", slot_layer_is_layer(raw) ? LAYER_SLOT_TYPE_LAYER @@ -489,8 +489,8 @@ bool slot_layer_is_visible(slot_layer_t *raw) { slot_layer_t_array_t *slot_layer_get_children(slot_layer_t *raw) { slot_layer_t_array_t *children = NULL; // Child layers of a group - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw && slot_layer_is_layer(l)) { if (children == NULL) { children = any_array_create_from_raw((void *[]){}, 0); @@ -503,8 +503,8 @@ slot_layer_t_array_t *slot_layer_get_children(slot_layer_t *raw) { slot_layer_t_array_t *slot_layer_get_recursive_children(slot_layer_t *raw) { slot_layer_t_array_t *children = NULL; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw) { // Child layers and group masks if (children == NULL) { children = any_array_create_from_raw((void *[]){}, 0); @@ -528,8 +528,8 @@ slot_layer_t_array_t *slot_layer_get_masks(slot_layer_t *raw, bool include_group slot_layer_t_array_t *children = NULL; // Child masks of a layer - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw && slot_layer_is_mask(l)) { if (children == NULL) { children = any_array_create_from_raw((void *[]){}, 0); @@ -540,8 +540,8 @@ slot_layer_t_array_t *slot_layer_get_masks(slot_layer_t *raw, bool include_group // Child masks of a parent group if (include_group_masks) { if (raw->parent != NULL && slot_layer_is_group(raw->parent)) { - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw->parent && slot_layer_is_mask(l)) { if (children == NULL) { children = any_array_create_from_raw((void *[]){}, 0); @@ -556,8 +556,8 @@ slot_layer_t_array_t *slot_layer_get_masks(slot_layer_t *raw, bool include_group bool slot_layer_has_masks(slot_layer_t *raw, bool include_group_masks) { // Layer mask - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw && slot_layer_is_mask(l)) { return true; } @@ -565,8 +565,8 @@ bool slot_layer_has_masks(slot_layer_t *raw, bool include_group_masks) { // Group mask if (include_group_masks && raw->parent != NULL && slot_layer_is_group(raw->parent)) { - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw->parent && slot_layer_is_mask(l)) { return true; } @@ -582,8 +582,8 @@ slot_layer_t_array_t *slot_layer_get_filters(slot_layer_t *raw, bool include_gro slot_layer_t_array_t *children = NULL; // Child filters of a layer - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw && slot_layer_is_filter(l)) { if (children == NULL) { children = any_array_create_from_raw((void *[]){}, 0); @@ -594,8 +594,8 @@ slot_layer_t_array_t *slot_layer_get_filters(slot_layer_t *raw, bool include_gro // Child filters of a parent group if (include_group_filters) { if (raw->parent != NULL && slot_layer_is_group(raw->parent)) { - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->parent == raw->parent && slot_layer_is_filter(l)) { if (children == NULL) { children = any_array_create_from_raw((void *[]){}, 0); @@ -669,27 +669,27 @@ bool slot_layer_is_in_group(slot_layer_t *raw) { } bool slot_layer_can_move(slot_layer_t *raw, i32 to) { - i32 old_index = array_index_of(project_layers, raw); + i32 old_index = array_index_of(g_project->_->layers, raw); i32 delta = to - old_index; // If delta > 0 the layer is moved up, otherwise down - if (to < 0 || to > project_layers->length - 1 || delta == 0) { + if (to < 0 || to > g_project->_->layers->length - 1 || delta == 0) { return false; } // If the layer is moved up, all layers between the old position and the new one move one down // The layers above the new position stay where they are // If the new position is on top or on bottom no upper resp. lower layer exists - slot_layer_t *new_upper_layer = delta > 0 ? (to < project_layers->length - 1 ? project_layers->buffer[to + 1] : NULL) : project_layers->buffer[to]; + slot_layer_t *new_upper_layer = delta > 0 ? (to < g_project->_->layers->length - 1 ? g_project->_->layers->buffer[to + 1] : NULL) : g_project->_->layers->buffer[to]; // Group or layer is collapsed so we check below and update the upper layer if (new_upper_layer != NULL && !new_upper_layer->show_panel) { slot_layer_t_array_t *children = slot_layer_get_recursive_children(new_upper_layer); to -= children != NULL ? children->length : 0; delta = to - old_index; - new_upper_layer = delta > 0 ? (to < project_layers->length - 1 ? project_layers->buffer[to + 1] : NULL) : project_layers->buffer[to]; + new_upper_layer = delta > 0 ? (to < g_project->_->layers->length - 1 ? g_project->_->layers->buffer[to + 1] : NULL) : g_project->_->layers->buffer[to]; } - slot_layer_t *new_lower_layer = delta > 0 ? project_layers->buffer[to] : (to > 0 ? project_layers->buffer[to - 1] : NULL); + slot_layer_t *new_lower_layer = delta > 0 ? g_project->_->layers->buffer[to] : (to > 0 ? g_project->_->layers->buffer[to - 1] : NULL); if (slot_layer_is_mask(raw)) { // Masks can not be on top @@ -776,24 +776,24 @@ void slot_layer_move(slot_layer_t *raw, i32 to) { } i32_map_t *pointers = tab_layers_init_layer_map(); - i32 old_index = array_index_of(project_layers, raw); + i32 old_index = array_index_of(g_project->_->layers, raw); i32 delta = to - old_index; - slot_layer_t *new_upper_layer = delta > 0 ? (to < project_layers->length - 1 ? project_layers->buffer[to + 1] : NULL) : project_layers->buffer[to]; + slot_layer_t *new_upper_layer = delta > 0 ? (to < g_project->_->layers->length - 1 ? g_project->_->layers->buffer[to + 1] : NULL) : g_project->_->layers->buffer[to]; // Group or layer is collapsed so we check below and update the upper layer if (new_upper_layer != NULL && !new_upper_layer->show_panel) { slot_layer_t_array_t *children = slot_layer_get_recursive_children(new_upper_layer); to -= children != NULL ? children->length : 0; delta = to - old_index; - new_upper_layer = delta > 0 ? (to < project_layers->length - 1 ? project_layers->buffer[to + 1] : NULL) : project_layers->buffer[to]; + new_upper_layer = delta > 0 ? (to < g_project->_->layers->length - 1 ? g_project->_->layers->buffer[to + 1] : NULL) : g_project->_->layers->buffer[to]; } context_set_layer(raw); history_order_layers(to); ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2; - array_remove(project_layers, raw); - array_insert(project_layers, to, raw); + array_remove(g_project->_->layers, raw); + array_insert(g_project->_->layers, to, raw); if (slot_layer_is_filter(raw)) { // Precondition new_upper_layer != NULL, ensured in can_move @@ -835,9 +835,9 @@ void slot_layer_move(slot_layer_t *raw, i32 to) { if (layer_masks != NULL) { for (i32 idx = 0; idx < layer_masks->length; ++idx) { slot_layer_t *mask = layer_masks->buffer[idx]; - array_remove(project_layers, mask); + array_remove(g_project->_->layers, mask); // If the masks are moved down each step increases the index below the layer by one. - array_insert(project_layers, delta > 0 ? old_index + delta - 1 : old_index + delta + idx, mask); + array_insert(g_project->_->layers, delta > 0 ? old_index + delta - 1 : old_index + delta + idx, mask); } } @@ -848,8 +848,8 @@ void slot_layer_move(slot_layer_t *raw, i32 to) { i32 masks_count = layer_masks != NULL ? layer_masks->length : 0; for (i32 idx = 0; idx < layer_filters->length; ++idx) { slot_layer_t *filter = layer_filters->buffer[idx]; - array_remove(project_layers, filter); - array_insert(project_layers, delta > 0 ? old_index + delta - 1 : old_index + delta + masks_count + idx, filter); + array_remove(g_project->_->layers, filter); + array_insert(g_project->_->layers, delta > 0 ? old_index + delta - 1 : old_index + delta + masks_count + idx, filter); } } @@ -873,21 +873,21 @@ void slot_layer_move(slot_layer_t *raw, i32 to) { if (children != NULL) { for (i32 idx = 0; idx < children->length; ++idx) { slot_layer_t *child = children->buffer[idx]; - array_remove(project_layers, child); + array_remove(g_project->_->layers, child); // If the children are moved down each step increases the index below the layer by one - array_insert(project_layers, delta > 0 ? old_index + delta - 1 : old_index + delta + idx, child); + array_insert(g_project->_->layers, delta > 0 ? old_index + delta - 1 : old_index + delta + idx, child); } } } - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; tab_layers_remap_layer_pointers(m->canvas->nodes, tab_layers_fill_layer_map(pointers)); } } void layers_init() { - slot_layer_clear(project_layers->buffer[0], color_from_floats(layers_default_base, layers_default_base, layers_default_base, 1.0), NULL, 1.0, + slot_layer_clear(g_project->_->layers->buffer[0], color_from_floats(layers_default_base, layers_default_base, layers_default_base, 1.0), NULL, 1.0, layers_default_rough, 0.0); } @@ -899,8 +899,8 @@ void layers_resize() { sys_notify_on_next_frame(&slot_layer_unload, l); } } - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; slot_layer_resize_and_set_bits(l); } for (i32 i = 0; i < history_undo_layers->length; ++i) { @@ -944,8 +944,8 @@ void layers_resize() { } void layers_set_bits() { - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; slot_layer_resize_and_set_bits(l); } for (i32 i = 0; i < history_undo_layers->length; ++i) { @@ -955,7 +955,7 @@ void layers_set_bits() { } void layers_make_temp_img() { - slot_layer_t *l = project_layers->buffer[0]; + slot_layer_t *l = g_project->_->layers->buffer[0]; if (layers_temp_image != NULL && (layers_temp_image->width != l->texpaint->width || layers_temp_image->height != l->texpaint->height || layers_temp_image->format != l->texpaint->format)) { @@ -998,7 +998,7 @@ void layers_make_temp_mask_img() { } void layers_make_export_img() { - slot_layer_t *l = project_layers->buffer[0]; + slot_layer_t *l = g_project->_->layers->buffer[0]; if (layers_expa != NULL && (layers_expa->width != l->texpaint->width || layers_expa->height != l->texpaint->height || layers_expa->format != l->texpaint->format)) { gpu_texture_t *_expa = layers_expa; @@ -1078,8 +1078,8 @@ bool layers_is_fill_material() { } slot_material_t *m = g_context->material; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->fill_material == m) { return true; } @@ -1132,14 +1132,14 @@ void layers_update_fill_layers() { bool has_fill_layer = false; bool has_fill_mask = false; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_layer(l) && l->fill_material == g_context->material) { has_fill_layer = true; } } - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_mask(l) && l->fill_material == g_context->material) { has_fill_mask = true; } @@ -1156,8 +1156,8 @@ void layers_update_fill_layers() { if (has_fill_layer) { bool first = true; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_layer(l) && l->fill_material == g_context->material) { g_context->layer = l; if (first) { @@ -1184,8 +1184,8 @@ void layers_update_fill_layers() { } if (has_fill_mask) { bool first = true; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_mask(l) && l->fill_material == g_context->material) { g_context->layer = l; if (first) { @@ -1215,8 +1215,8 @@ void layers_update_fill_layers() { bool layers_is_path_material() { slot_material_t *m = g_context->material; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_path(l) && l->path_material == m) { return true; } @@ -1225,8 +1225,8 @@ bool layers_is_path_material() { } void layers_update_path_layers() { - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (slot_layer_is_path(l) && l->path_material == g_context->material) { util_layer_repaint_path(l); } @@ -1276,8 +1276,8 @@ void layers_update_fill_layer(bool parse_paint) { void layers_update_linked_layers() { slot_material_t *_material = g_context->material; bool any_linked = false; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; bool has_linked = false; for (i32 j = 0; j < m->canvas->nodes->length; ++j) { ui_node_t *node = m->canvas->nodes->buffer[j]; @@ -1305,8 +1305,8 @@ void layers_set_object_mask() { tr("None"), }, 1); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; any_array_push(ar, p->base->name); } @@ -1318,9 +1318,9 @@ void layers_set_object_mask() { if (g_context->merged_object != NULL) { g_context->merged_object->base->visible = false; } - mesh_object_t *o = project_paint_objects->buffer[0]; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + mesh_object_t *o = g_project->_->paint_objects->buffer[0]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; char *mask_name = ar->buffer[mask]; if (string_equals(p->base->name, mask_name)) { o = p; @@ -1330,8 +1330,8 @@ void layers_set_object_mask() { context_select_paint_object(o); } else { - i32 atlas_mask = g_context->layer_filter > project_paint_objects->length ? g_context->layer_filter : slot_layer_get_object_mask(g_context->layer); - bool is_atlas = atlas_mask > project_paint_objects->length; + i32 atlas_mask = g_context->layer_filter > g_project->_->paint_objects->length ? g_context->layer_filter : slot_layer_get_object_mask(g_context->layer); + bool is_atlas = atlas_mask > g_project->_->paint_objects->length; if (g_context->merged_object == NULL || is_atlas || g_context->merged_object_is_atlas) { mesh_object_t_array_t *visibles = is_atlas ? project_get_atlas_objects(atlas_mask) : NULL; util_mesh_merge(visibles); @@ -1348,7 +1348,7 @@ void layers_new_layer_clear(slot_layer_t *l) { } slot_layer_t *layers_new_layer(bool clear, i32 position, slot_layer_t *parent) { - if (project_layers->length > layers_max_layers) { + if (g_project->_->layers->length > layers_max_layers) { return NULL; } @@ -1356,24 +1356,24 @@ slot_layer_t *layers_new_layer(bool clear, i32 position, slot_layer_t *parent) { l->object_mask = g_context->layer_filter; if (position == -1 && slot_layer_is_filter(l)) { - position = array_index_of(project_layers, parent); + position = array_index_of(g_project->_->layers, parent); } if (position == -1) { if (slot_layer_is_mask(g_context->layer) || slot_layer_is_filter(g_context->layer)) context_set_layer(g_context->layer->parent); - array_insert(project_layers, array_index_of(project_layers, g_context->layer) + 1, l); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, g_context->layer) + 1, l); } else { - array_insert(project_layers, position, l); + array_insert(g_project->_->layers, position, l); } context_set_layer(l); if (parent == NULL) { - i32 li = array_index_of(project_layers, g_context->layer); + i32 li = array_index_of(g_project->_->layers, g_context->layer); if (li > 0) { - slot_layer_t *below = project_layers->buffer[li - 1]; + slot_layer_t *below = g_project->_->layers->buffer[li - 1]; if (slot_layer_is_layer(below)) { g_context->layer->parent = below->parent; } @@ -1392,15 +1392,15 @@ void layers_new_mask_clear(slot_layer_t *l) { } slot_layer_t *layers_new_mask(bool clear, slot_layer_t *parent, i32 position) { - if (project_layers->length > layers_max_layers) { + if (g_project->_->layers->length > layers_max_layers) { return NULL; } slot_layer_t *l = slot_layer_create("", LAYER_SLOT_TYPE_MASK, parent); if (position == -1) { - position = array_index_of(project_layers, parent); + position = array_index_of(g_project->_->layers, parent); } - array_insert(project_layers, position, l); + array_insert(g_project->_->layers, position, l); context_set_layer(l); if (clear) { sys_notify_on_next_frame(&layers_new_mask_clear, l); @@ -1410,12 +1410,12 @@ slot_layer_t *layers_new_mask(bool clear, slot_layer_t *parent, i32 position) { } slot_layer_t *layers_new_group() { - if (project_layers->length > layers_max_layers) { + if (g_project->_->layers->length > layers_max_layers) { return NULL; } slot_layer_t *l = slot_layer_create("", LAYER_SLOT_TYPE_GROUP, NULL); - any_array_push(project_layers, l); + any_array_push(g_project->_->layers, l); context_set_layer(l); return l; } @@ -1502,7 +1502,7 @@ void layers_create_filter_on_next_frame(void *_) { } ui_node_t *n = nodes_material_create_node("LAYER", NULL); - n->buttons->buffer[0]->default_value = f32_array_create_x(array_index_of(project_layers, l->parent)); + n->buttons->buffer[0]->default_value = f32_array_create_x(array_index_of(g_project->_->layers, l->parent)); n->x = -50; n->y = 100; @@ -1567,31 +1567,31 @@ void layers_duplicate_layer(slot_layer_t *l) { slot_layer_t *m = masks->buffer[i]; m = slot_layer_duplicate(m); m->parent = new_layer; - array_remove(project_layers, m); - array_insert(project_layers, array_index_of(project_layers, new_layer), m); + array_remove(g_project->_->layers, m); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, new_layer), m); } } context_set_layer(new_layer); } else { slot_layer_t *new_group = layers_new_group(); - array_remove(project_layers, new_group); - array_insert(project_layers, array_index_of(project_layers, l) + 1, new_group); + array_remove(g_project->_->layers, new_group); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, l) + 1, new_group); // group.show_panel = true; for (i32 i = 0; i < slot_layer_get_children(l)->length; ++i) { slot_layer_t *c = slot_layer_get_children(l)->buffer[i]; slot_layer_t_array_t *masks = slot_layer_get_masks(c, false); slot_layer_t *new_layer = slot_layer_duplicate(c); new_layer->parent = new_group; - array_remove(project_layers, new_layer); - array_insert(project_layers, array_index_of(project_layers, new_group), new_layer); + array_remove(g_project->_->layers, new_layer); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, new_group), new_layer); if (masks != NULL) { for (i32 i = 0; i < masks->length; ++i) { slot_layer_t *m = masks->buffer[i]; slot_layer_t *new_mask = slot_layer_duplicate(m); new_mask->parent = new_layer; - array_remove(project_layers, new_mask); - array_insert(project_layers, array_index_of(project_layers, new_layer), new_mask); + array_remove(g_project->_->layers, new_mask); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, new_layer), new_mask); } } } @@ -1601,8 +1601,8 @@ void layers_duplicate_layer(slot_layer_t *l) { slot_layer_t *m = group_masks->buffer[i]; slot_layer_t *new_mask = slot_layer_duplicate(m); new_mask->parent = new_group; - array_remove(project_layers, new_mask); - array_insert(project_layers, array_index_of(project_layers, new_group), new_mask); + array_remove(g_project->_->layers, new_mask); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, new_group), new_mask); } } context_set_layer(new_group); @@ -1633,7 +1633,7 @@ void layers_merge_down() { context_set_layer(l1); } - slot_layer_t *l0 = project_layers->buffer[array_index_of(project_layers, l1) - 1]; + slot_layer_t *l0 = g_project->_->layers->buffer[array_index_of(g_project->_->layers, l1) - 1]; if (slot_layer_is_group(l0)) { l0 = layers_merge_group(l0); @@ -1804,7 +1804,7 @@ void layers_merge_layer(slot_layer_t *l0, slot_layer_t *l1, bool use_mask) { slot_layer_t *layers_flatten(bool height_to_normal, slot_layer_t_array_t *layers) { if (layers == NULL) { - layers = project_layers; + layers = g_project->_->layers; } layers_make_temp_img(); layers_make_export_img(); @@ -1957,8 +1957,8 @@ void layers_on_resized_on_next_frame(void *_) { layers_resize(); slot_layer_t *_layer = g_context->layer; slot_material_t *_material = g_context->material; - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->fill_material != NULL) { g_context->layer = l; g_context->material = l->fill_material; diff --git a/paint/sources/slot_material.c b/paint/sources/slot_material.c index fd5f8093..11796570 100644 --- a/paint/sources/slot_material.c +++ b/paint/sources/slot_material.c @@ -19,8 +19,8 @@ slot_material_t *slot_material_create(material_data_t *m, ui_node_canvas_t *c) { raw->paint_emis = true; raw->paint_subs = true; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *mat = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *mat = g_project->_->materials->buffer[i]; if (mat->id >= raw->id) { raw->id = mat->id + 1; } @@ -72,9 +72,9 @@ void slot_material_unload(slot_material_t *raw) { void slot_material_delete(slot_material_t *raw) { slot_material_unload(raw); - i32 mpos = array_index_of(project_materials, raw); - array_remove(project_materials, raw); - if (project_materials->length > 0) { - context_set_material(project_materials->buffer[mpos > 0 ? mpos - 1 : 0]); + i32 mpos = array_index_of(g_project->_->materials, raw); + array_remove(g_project->_->materials, raw); + if (g_project->_->materials->length > 0) { + context_set_material(g_project->_->materials->buffer[mpos > 0 ? mpos - 1 : 0]); } } diff --git a/paint/sources/types.h b/paint/sources/types.h index 5851d567..1f4a7c67 100644 --- a/paint/sources/types.h +++ b/paint/sources/types.h @@ -520,6 +520,18 @@ typedef struct node_group { struct ui_node_canvas *canvas; } node_group_t; +typedef struct { + struct asset_t_array *assets; + struct slot_material_t_array *materials; + struct slot_brush_t_array *brushes; + struct slot_layer_t_array *layers; + struct slot_font_t_array *fonts; + struct node_group_t_array *material_groups; + char *filepath; + i32 next_asset_id; + struct mesh_object_t_array *paint_objects; +} project_runtime_t; + typedef struct project { char *version; struct string_array *assets; // texture_assets @@ -553,6 +565,7 @@ typedef struct project { i32 timeline_max_frames; struct timeline_layer_keyframe_data_t_array *timeline_layers; struct timeline_mesh_keyframe_data_t_array *timeline_meshes; + project_runtime_t *_; } project_t; typedef struct asset { diff --git a/paint/sources/ui/box_export.c b/paint/sources/ui/box_export.c index ef71d462..24ba1593 100644 --- a/paint/sources/ui/box_export.c +++ b/paint/sources/ui/box_export.c @@ -11,8 +11,8 @@ void box_export_tab_export_textures_run(void *_) { i32 _dilate_radius = g_config->dilate_radius; g_config->dilate_radius = 256; slot_layer_t *_layer = g_context->layer; - for (i32 i = 0; i < project_layers->length; ++i) { - g_context->layer = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + g_context->layer = g_project->_->layers->buffer[i]; render_path_paint_dilate(true, true); } g_context->layer = _layer; @@ -394,18 +394,18 @@ void box_export_tab_presets() { void box_export_tab_atlases() { bool tab_vertical = g_config->touch_ui; if (ui_tab(box_export_htab, tr("Atlases"), tab_vertical, -1, false)) { - if (g_project->atlas_objects == NULL || g_project->atlas_objects->length != project_paint_objects->length) { + if (g_project->atlas_objects == NULL || g_project->atlas_objects->length != g_project->_->paint_objects->length) { g_project->atlas_objects = i32_array_create_from_raw((i32[]){}, 0); g_project->atlas_names = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { i32_array_push(g_project->atlas_objects, 0); i32 i1 = i + 1; any_array_push(g_project->atlas_names, string("%s %s", tr("Atlas"), i32_to_string(i1))); } } - for (i32 i = 0; i < project_paint_objects->length; ++i) { + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { ui_row2(); - ui_text(project_paint_objects->buffer[i]->base->name, UI_ALIGN_LEFT, 0x00000000); + ui_text(g_project->_->paint_objects->buffer[i]->base->name, UI_ALIGN_LEFT, 0x00000000); ui_handle_t *hatlas = ui_nest(ui_handle(__ID__), i); hatlas->i = g_project->atlas_objects->buffer[i]; g_project->atlas_objects->buffer[i] = ui_combo(hatlas, g_project->atlas_names, tr("Atlas"), false, UI_ALIGN_LEFT, true); @@ -431,7 +431,7 @@ void box_export_tab_export_mesh_path_picked(char *path) { paint_objects = NULL; } else { - mesh_object_t *po = project_paint_objects->buffer[box_export_mesh_handle->i - 1]; + mesh_object_t *po = g_project->_->paint_objects->buffer[box_export_mesh_handle->i - 1]; paint_objects = any_array_create_from_raw( (void *[]){ po, @@ -467,8 +467,8 @@ void box_export_tab_export_mesh(ui_handle_t *htab) { tr("All"), }, 1); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; any_array_push(ar, p->base->name); } ui_combo(box_export_mesh_handle, ar, tr("Meshes"), true, UI_ALIGN_LEFT, true); @@ -485,10 +485,10 @@ void box_export_tab_export_mesh(ui_handle_t *htab) { i32 pos = box_export_mesh_handle->i; mesh_object_t_array_t *paint_objects; if (pos == 0) { - paint_objects = project_paint_objects; + paint_objects = g_project->_->paint_objects; } else { - mesh_object_t *po = project_paint_objects->buffer[pos - 1]; + mesh_object_t *po = g_project->_->paint_objects->buffer[pos - 1]; paint_objects = any_array_create_from_raw( (void *[]){ po, diff --git a/paint/sources/ui/box_preferences.c b/paint/sources/ui/box_preferences.c index 06d4bae6..8f622fdd 100644 --- a/paint/sources/ui/box_preferences.c +++ b/paint/sources/ui/box_preferences.c @@ -113,8 +113,8 @@ void box_preferences_interface_tab() { h_node_previews->b = g_config->node_previews; g_config->node_previews = ui_check(h_node_previews, tr("Node Previews"), ""); if (h_node_previews->changed) { - for (i32 i = 0; i < project_materials->length; ++i) { - ui_node_canvas_t *c = project_materials->buffer[i]->canvas; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + ui_node_canvas_t *c = g_project->_->materials->buffer[i]->canvas; for (i32 j = 0; j < c->nodes->length; ++j) { ui_node_t *n = c->nodes->buffer[j]; if (g_config->node_previews) { diff --git a/paint/sources/ui/tab_browser.c b/paint/sources/ui/tab_browser.c index cb8fa4ec..b79cc921 100644 --- a/paint/sources/ui/tab_browser.c +++ b/paint/sources/ui/tab_browser.c @@ -27,8 +27,8 @@ void tab_browser_draw_import_asset(char *path) { void tab_browser_draw_set_as_color_id_map_on_next_frame(void *_) { char *file = _tab_browser_draw_file; i32 asset_index = -1; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->file, file)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->file, file)) { asset_index = i; break; } @@ -52,14 +52,14 @@ void tab_browser_draw_set_as_color_id_map() { void tab_browser_draw_set_as_mask_on_next_frame(void *_) { char *file = _tab_browser_draw_file; i32 asset_index = -1; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->file, file)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->file, file)) { asset_index = i; break; } } if (asset_index != -1) { - layers_create_image_mask(project_assets->buffer[asset_index]); + layers_create_image_mask(g_project->_->assets->buffer[asset_index]); } } @@ -70,15 +70,15 @@ void tab_browser_draw_set_as_mask() { void tab_browser_draw_set_as_envmap_on_next_frame(void *_) { char *file = _tab_browser_draw_file; i32 asset_index = -1; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->file, file)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->file, file)) { asset_index = i; break; } } if (asset_index != -1) { - import_envmap_run(file, project_get_image(project_assets->buffer[asset_index])); + import_envmap_run(file, project_get_image(g_project->_->assets->buffer[asset_index])); } } diff --git a/paint/sources/ui/tab_brushes.c b/paint/sources/ui/tab_brushes.c index 5e9f9e55..c6f11c06 100644 --- a/paint/sources/ui/tab_brushes.c +++ b/paint/sources/ui/tab_brushes.c @@ -7,7 +7,7 @@ i32 tab_brushes_drag_pos = -1; void tab_brushes_draw_make_brush_preview(void *_) { i32 i = _tab_brushes_draw_i; slot_brush_t *_brush = g_context->brush; - g_context->brush = project_brushes->buffer[i]; + g_context->brush = g_project->_->brushes->buffer[i]; make_material_parse_brush(); brush_output_node_parse_inputs(); util_render_make_brush_preview(); @@ -17,17 +17,17 @@ void tab_brushes_draw_make_brush_preview(void *_) { void tab_brushes_draw_duplicate(void *_) { i32 i = _tab_brushes_draw_i; g_context->brush = slot_brush_create(NULL); - any_array_push(project_brushes, g_context->brush); - void *cloned = util_clone_canvas(project_brushes->buffer[i]->canvas); + any_array_push(g_project->_->brushes, g_context->brush); + void *cloned = util_clone_canvas(g_project->_->brushes->buffer[i]->canvas); g_context->brush->canvas = cloned; context_set_brush(g_context->brush); util_render_make_brush_preview(); } void tab_brushes_delete_brush(slot_brush_t *b) { - i32 i = array_index_of(project_brushes, b); - context_select_brush(i == project_brushes->length - 1 ? i - 1 : i + 1); - array_splice(project_brushes, i, 1); + i32 i = array_index_of(g_project->_->brushes, b); + context_select_brush(i == g_project->_->brushes->length - 1 ? i - 1 : i + 1); + array_splice(g_project->_->brushes, i, 1); ui_base_hwnds->buffer[1]->redraws = 2; } @@ -44,8 +44,8 @@ void tab_brushes_draw_context_menu() { sys_notify_on_next_frame(&tab_brushes_draw_duplicate, NULL); } - if (project_brushes->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) { - tab_brushes_delete_brush(project_brushes->buffer[i]); + if (g_project->_->brushes->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) { + tab_brushes_delete_brush(g_project->_->brushes->buffer[i]); } } @@ -62,7 +62,7 @@ void tab_brushes_draw(ui_handle_t *htab) { ui_row(row); if (ui_icon_button(tr("New"), ICON_PLUS, UI_ALIGN_CENTER)) { g_context->brush = slot_brush_create(NULL); - any_array_push(project_brushes, g_context->brush); + any_array_push(g_project->_->brushes, g_context->brush); make_material_parse_brush(); ui_nodes_hwnd->redraws = 2; } @@ -86,7 +86,7 @@ void tab_brushes_draw(ui_handle_t *htab) { f32 uiy = 0.0; i32 imgw_val = math_floor(50 * UI_SCALE()); - for (i32 row = 0; row < math_floor(math_ceil(project_brushes->length / (float)num)); ++row) { + for (i32 row = 0; row < math_floor(math_ceil(g_project->_->brushes->length / (float)num)); ++row) { i32 mult = g_config->show_asset_names ? 2 : 1; f32_array_t *ar = f32_array_create_from_raw((f32[]){}, 0); for (i32 i = 0; i < num * mult; ++i) { @@ -103,17 +103,17 @@ void tab_brushes_draw(ui_handle_t *htab) { for (i32 j = 0; j < num; ++j) { i32 imgw = math_floor(50 * UI_SCALE()); i32 i = j + row * num; - if (i >= project_brushes->length) { + if (i >= g_project->_->brushes->length) { ui_end_element_of_size(imgw); if (g_config->show_asset_names) { ui_end_element_of_size(0); } continue; } - gpu_texture_t *img = UI_SCALE() > 1 ? project_brushes->buffer[i]->image : project_brushes->buffer[i]->image_icon; - gpu_texture_t *img_full = project_brushes->buffer[i]->image; + gpu_texture_t *img = UI_SCALE() > 1 ? g_project->_->brushes->buffer[i]->image : g_project->_->brushes->buffer[i]->image_icon; + gpu_texture_t *img_full = g_project->_->brushes->buffer[i]->image; - if (g_context->brush == project_brushes->buffer[i]) { + if (g_context->brush == g_project->_->brushes->buffer[i]) { // ui_fill(1, -2, img.width + 3, img.height + 3, ui.ops.theme.HIGHLIGHT_COL); // TODO i32 off = row % 2 == 1 ? 1 : 0; i32 w = 50; @@ -134,7 +134,7 @@ void tab_brushes_draw(ui_handle_t *htab) { ui_fill(-1, -2, 2, imgw_val + 4, ui->ops->theme->HIGHLIGHT_COL); } - ui_state_t state = project_brushes->buffer[i]->preview_ready ? ui_image(img, 0xffffffff, -1.0) + ui_state_t state = g_project->_->brushes->buffer[i]->preview_ready ? ui_image(img, 0xffffffff, -1.0) : ui_sub_image(resource_get("icons.k"), -1, -1.0, tile * 5, tile, tile, tile); if (state == UI_STATE_HOVERED && base_drag_brush != NULL) { @@ -143,7 +143,7 @@ void tab_brushes_draw(ui_handle_t *htab) { } if (state == UI_STATE_STARTED) { - if (g_context->brush != project_brushes->buffer[i]) { + if (g_context->brush != g_project->_->brushes->buffer[i]) { context_select_brush(i); } base_drag_off_x = -(mouse_x - uix - ui->_window_x - 3); @@ -174,19 +174,19 @@ void tab_brushes_draw(ui_handle_t *htab) { } else { ui_tooltip_image(img_full, 0); - ui_tooltip(project_brushes->buffer[i]->canvas->name); + ui_tooltip(g_project->_->brushes->buffer[i]->canvas->name); } } if (g_config->show_asset_names) { ui->_x = uix; ui->_y += slotw * 0.9; - ui_text(project_brushes->buffer[i]->canvas->name, UI_ALIGN_CENTER, 0x00000000); + ui_text(g_project->_->brushes->buffer[i]->canvas->name, UI_ALIGN_CENTER, 0x00000000); if (ui->is_hovered) { - ui_tooltip(project_brushes->buffer[i]->canvas->name); + ui_tooltip(g_project->_->brushes->buffer[i]->canvas->name); } ui->_y -= slotw * 0.9; - if (i == project_brushes->length - 1) { + if (i == g_project->_->brushes->length - 1) { ui->_y += j == num - 1 ? imgw : imgw + UI_ELEMENT_H() + UI_ELEMENT_OFFSET(); } } @@ -195,7 +195,7 @@ void tab_brushes_draw(ui_handle_t *htab) { ui->_y += 6; } - if (base_drag_brush != NULL && tab_brushes_drag_pos == project_brushes->length) { + if (base_drag_brush != NULL && tab_brushes_drag_pos == g_project->_->brushes->length) { ui->_x = uix; ui->_y = uiy; ui_fill(imgw_val + 1, -2, 2, imgw_val + 4, ui->ops->theme->HIGHLIGHT_COL); @@ -207,23 +207,23 @@ void tab_brushes_draw(ui_handle_t *htab) { bool in_focus = ui->input_x > ui->_window_x && ui->input_x < ui->_window_x + ui->_window_w && ui->input_y > ui->_window_y && ui->input_y < ui->_window_y + ui->_window_h; - if (in_focus && ui->is_delete_down && project_brushes->length > 1) { + if (in_focus && ui->is_delete_down && g_project->_->brushes->length > 1) { ui->is_delete_down = false; tab_brushes_delete_brush(g_context->brush); } if (in_focus && ui->is_ctrl_down && ui->is_key_pressed && ui->key_code == KEY_CODE_D) { - _tab_brushes_draw_i = array_index_of(project_brushes, g_context->brush); + _tab_brushes_draw_i = array_index_of(g_project->_->brushes, g_context->brush); sys_notify_on_next_frame(&tab_brushes_draw_duplicate, NULL); } if (in_focus) { - i32 i = array_index_of(project_brushes, g_context->brush); + i32 i = array_index_of(g_project->_->brushes, g_context->brush); if (ui->is_key_pressed && ui->key_code == KEY_CODE_UP) { if (i > 0) { context_select_brush(i - 1); } } if (ui->is_key_pressed && ui->key_code == KEY_CODE_DOWN) { - if (i < project_brushes->length - 1) { + if (i < g_project->_->brushes->length - 1) { context_select_brush(i + 1); } } @@ -236,10 +236,10 @@ void tab_brushes_accept_brush_drop(slot_brush_t *brush) { return; } - i32 brush_pos = array_index_of(project_brushes, brush); + i32 brush_pos = array_index_of(g_project->_->brushes, brush); if (brush_pos != -1 && math_abs(brush_pos - tab_brushes_drag_pos) > 0) { - array_remove(project_brushes, brush); + array_remove(g_project->_->brushes, brush); i32 new_pos = tab_brushes_drag_pos - brush_pos > 0 ? tab_brushes_drag_pos - 1 : tab_brushes_drag_pos; - array_insert(project_brushes, new_pos, brush); + array_insert(g_project->_->brushes, new_pos, brush); } } diff --git a/paint/sources/ui/tab_fonts.c b/paint/sources/ui/tab_fonts.c index 59bd6b1a..c5411c19 100644 --- a/paint/sources/ui/tab_fonts.c +++ b/paint/sources/ui/tab_fonts.c @@ -7,16 +7,16 @@ i32 tab_fonts_drag_pos = -1; void tab_fonts_draw_make_font_preview(void *_) { i32 i = _tab_fonts_draw_i; slot_font_t *_font = g_context->font; - g_context->font = project_fonts->buffer[i]; + g_context->font = g_project->_->fonts->buffer[i]; util_render_make_font_preview(); g_context->font = _font; } void tab_fonts_delete_font_on_next_frame(slot_font_t *font) { - i32 i = array_index_of(project_fonts, font); - context_select_font(i == project_fonts->length - 1 ? i - 1 : i + 1); - data_delete_font(project_fonts->buffer[i]->file); - array_splice(project_fonts, i, 1); + i32 i = array_index_of(g_project->_->fonts, font); + context_select_font(i == g_project->_->fonts->length - 1 ? i - 1 : i + 1); + data_delete_font(g_project->_->fonts->buffer[i]->file); + array_splice(g_project->_->fonts, i, 1); } void tab_fonts_delete_font(slot_font_t *font) { @@ -26,8 +26,8 @@ void tab_fonts_delete_font(slot_font_t *font) { void tab_fonts_draw_context_menu_draw() { i32 i = _tab_fonts_draw_i; - if (project_fonts->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE) && !string_equals(project_fonts->buffer[i]->file, "")) { - tab_fonts_delete_font(project_fonts->buffer[i]); + if (g_project->_->fonts->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE) && !string_equals(g_project->_->fonts->buffer[i]->file, "")) { + tab_fonts_delete_font(g_project->_->fonts->buffer[i]); } } @@ -77,7 +77,7 @@ void tab_fonts_draw(ui_handle_t *htab) { f32 uiy = 0.0; i32 imgw_val = math_floor(50 * UI_SCALE()); - for (i32 row = 0; row < math_floor(math_ceil(project_fonts->length / (float)num)); ++row) { + for (i32 row = 0; row < math_floor(math_ceil(g_project->_->fonts->length / (float)num)); ++row) { i32 mult = g_config->show_asset_names ? 2 : 1; f32_array_t *ar = f32_array_create_from_raw((f32[]){}, 0); for (i32 i = 0; i < num * mult; ++i) { @@ -94,16 +94,16 @@ void tab_fonts_draw(ui_handle_t *htab) { for (i32 j = 0; j < num; ++j) { i32 imgw = math_floor(50 * UI_SCALE()); i32 i = j + row * num; - if (i >= project_fonts->length) { + if (i >= g_project->_->fonts->length) { ui_end_element_of_size(imgw); if (g_config->show_asset_names) { ui_end_element_of_size(0); } continue; } - gpu_texture_t *img = project_fonts->buffer[i]->image; + gpu_texture_t *img = g_project->_->fonts->buffer[i]->image; - if (g_context->font == project_fonts->buffer[i]) { + if (g_context->font == g_project->_->fonts->buffer[i]) { // ui_fill(1, -2, img.width + 3, img.height + 3, ui.ops.theme.HIGHLIGHT_COL); // TODO i32 off = row % 2 == 1 ? 1 : 0; i32 w = 50; @@ -125,7 +125,7 @@ void tab_fonts_draw(ui_handle_t *htab) { } ui_state_t state = UI_STATE_IDLE; - if (project_fonts->buffer[i]->preview_ready) { + if (g_project->_->fonts->buffer[i]->preview_ready) { state = ui_image(img, 0xffffffff, -1.0); } else { @@ -138,14 +138,14 @@ void tab_fonts_draw(ui_handle_t *htab) { } if (state == UI_STATE_STARTED) { - if (g_context->font != project_fonts->buffer[i]) { + if (g_context->font != g_project->_->fonts->buffer[i]) { _tab_fonts_draw_i = i; sys_notify_on_next_frame(&tab_fonts_draw_select_font, NULL); } base_drag_off_x = -(mouse_x - uix - ui->_window_x - 3); base_drag_off_y = -(mouse_y - uiy - ui->_window_y + 1); gc_unroot(base_drag_font); - base_drag_font = project_fonts->buffer[i]; + base_drag_font = g_project->_->fonts->buffer[i]; gc_root(base_drag_font); if (sys_time() - g_context->select_time < 0.2) { ui_base_show_2d_view(VIEW_2D_TYPE_FONT); @@ -166,19 +166,19 @@ void tab_fonts_draw(ui_handle_t *htab) { } else { ui_tooltip_image(img, 0); - ui_tooltip(project_fonts->buffer[i]->name); + ui_tooltip(g_project->_->fonts->buffer[i]->name); } } if (g_config->show_asset_names) { ui->_x = uix; ui->_y += slotw * 0.9; - ui_text(project_fonts->buffer[i]->name, UI_ALIGN_CENTER, 0x00000000); + ui_text(g_project->_->fonts->buffer[i]->name, UI_ALIGN_CENTER, 0x00000000); if (ui->is_hovered) { - ui_tooltip(project_fonts->buffer[i]->name); + ui_tooltip(g_project->_->fonts->buffer[i]->name); } ui->_y -= slotw * 0.9; - if (i == project_fonts->length - 1) { + if (i == g_project->_->fonts->length - 1) { ui->_y += j == num - 1 ? imgw : imgw + UI_ELEMENT_H() + UI_ELEMENT_OFFSET(); } } @@ -187,7 +187,7 @@ void tab_fonts_draw(ui_handle_t *htab) { ui->_y += 6; } - if (base_drag_font != NULL && tab_fonts_drag_pos == project_fonts->length) { + if (base_drag_font != NULL && tab_fonts_drag_pos == g_project->_->fonts->length) { ui->_x = uix; ui->_y = uiy; ui_fill(imgw_val + 1, -2, 2, imgw_val + 4, ui->ops->theme->HIGHLIGHT_COL); @@ -199,12 +199,12 @@ void tab_fonts_draw(ui_handle_t *htab) { bool in_focus = ui->input_x > ui->_window_x && ui->input_x < ui->_window_x + ui->_window_w && ui->input_y > ui->_window_y && ui->input_y < ui->_window_y + ui->_window_h; - if (in_focus && ui->is_delete_down && project_fonts->length > 1 && !string_equals(g_context->font->file, "")) { + if (in_focus && ui->is_delete_down && g_project->_->fonts->length > 1 && !string_equals(g_context->font->file, "")) { ui->is_delete_down = false; tab_fonts_delete_font(g_context->font); } if (in_focus) { - i32 i = array_index_of(project_fonts, g_context->font); + i32 i = array_index_of(g_project->_->fonts, g_context->font); if (ui->is_key_pressed && ui->key_code == KEY_CODE_UP) { if (i > 0) { _tab_fonts_draw_i = i - 1; @@ -212,7 +212,7 @@ void tab_fonts_draw(ui_handle_t *htab) { } } if (ui->is_key_pressed && ui->key_code == KEY_CODE_DOWN) { - if (i < project_fonts->length - 1) { + if (i < g_project->_->fonts->length - 1) { _tab_fonts_draw_i = i + 1; sys_notify_on_next_frame(&tab_fonts_draw_select_font, NULL); } @@ -226,10 +226,10 @@ void tab_fonts_accept_font_drop(slot_font_t *font) { return; } - i32 font_pos = array_index_of(project_fonts, font); + i32 font_pos = array_index_of(g_project->_->fonts, font); if (font_pos != -1 && math_abs(font_pos - tab_fonts_drag_pos) > 0) { - array_remove(project_fonts, font); + array_remove(g_project->_->fonts, font); i32 new_pos = tab_fonts_drag_pos - font_pos > 0 ? tab_fonts_drag_pos - 1 : tab_fonts_drag_pos; - array_insert(project_fonts, new_pos, font); + array_insert(g_project->_->fonts, new_pos, font); } } diff --git a/paint/sources/ui/tab_layers.c b/paint/sources/ui/tab_layers.c index f80b96f3..332ceab0 100644 --- a/paint/sources/ui/tab_layers.c +++ b/paint/sources/ui/tab_layers.c @@ -21,7 +21,7 @@ void tab_layers_set_drag_layer(slot_layer_t *layer, f32 off_x, f32 off_y) { gc_unroot(base_drag_layer); base_drag_layer = layer; gc_root(base_drag_layer); - g_context->drag_dest = array_index_of(project_layers, layer); + g_context->drag_dest = array_index_of(g_project->_->layers, layer); } void tab_layers_handle_layer_icon_state(slot_layer_t *l, i32 i, ui_state_t state, f32 uix, f32 uiy) { @@ -223,8 +223,8 @@ void tab_layers_delete_layer(slot_layer_t *l) { slot_layer_delete(l->parent); } g_context->ddirty = 2; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; tab_layers_remap_layer_pointers(m->canvas->nodes, tab_layers_fill_layer_map(pointers)); } } @@ -245,8 +245,8 @@ ui_handle_t *tab_layers_combo_object(slot_layer_t *l, bool label) { tr("Shared"), }, 1); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; any_array_push(ar, p->base->name); } string_array_t *atlases = project_get_used_atlases(); @@ -320,8 +320,8 @@ bool tab_layers_can_delete(slot_layer_t *l) { return true; } - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *slot = project_layers->buffer[i]; + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *slot = g_project->_->layers->buffer[i]; if (slot_layer_is_layer(slot)) { ++num_layers; } @@ -515,9 +515,9 @@ 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); + i32 pi = array_index_of(g_project->_->layers, l->parent); + array_remove(g_project->_->layers, l); + array_insert(g_project->_->layers, pi, l); l->parent = NULL; } @@ -542,21 +542,21 @@ void tab_layers_make_mask_preview_rgba32_on_next_frame(void *_) { } bool tab_layers_can_merge_down(slot_layer_t *l) { - i32 index = array_index_of(project_layers, l); + i32 index = array_index_of(g_project->_->layers, l); // Lowest layer if (index == 0) { return false; } // Lowest layer that has masks - if (slot_layer_is_layer(l) && slot_layer_is_mask(project_layers->buffer[0]) && project_layers->buffer[0]->parent == l) { + if (slot_layer_is_layer(l) && slot_layer_is_mask(g_project->_->layers->buffer[0]) && g_project->_->layers->buffer[0]->parent == l) { return false; } // The lowest toplevel layer is a group - if (slot_layer_is_group(l) && slot_layer_is_in_group(project_layers->buffer[0]) && slot_layer_get_containing_group(project_layers->buffer[0]) == l) { + if (slot_layer_is_group(l) && slot_layer_is_in_group(g_project->_->layers->buffer[0]) && slot_layer_get_containing_group(g_project->_->layers->buffer[0]) == l) { return false; } // Masks must be merged down to masks - if (slot_layer_is_mask(l) && !slot_layer_is_mask(project_layers->buffer[index - 1])) { + if (slot_layer_is_mask(l) && !slot_layer_is_mask(g_project->_->layers->buffer[index - 1])) { return false; } return true; @@ -938,9 +938,9 @@ void tab_layers_draw_layer_slot(slot_layer_t *l, i32 i, bool mini) { f32 absy = ui->_window_y + ui->_y; if (base_is_dragging && base_drag_layer != NULL && context_in_layers()) { if (mouse_y > absy + step && mouse_y < absy + step * 3) { - bool down = array_index_of(project_layers, base_drag_layer) >= i; + bool down = array_index_of(g_project->_->layers, base_drag_layer) >= i; g_context->drag_dest = down ? i : i - 1; - slot_layer_t_array_t *ls = project_layers; + slot_layer_t_array_t *ls = g_project->_->layers; i32 dest = g_context->drag_dest; bool to_group = down ? dest > 0 && ls->buffer[dest - 1]->parent != NULL && ls->buffer[dest - 1]->parent->show_panel : dest < ls->length && ls->buffer[dest]->parent != NULL && ls->buffer[dest]->parent->show_panel; @@ -951,8 +951,8 @@ void tab_layers_draw_layer_slot(slot_layer_t *l, i32 i, bool mini) { } } } - else if (i == project_layers->length - 1 && mouse_y < absy + step) { - g_context->drag_dest = project_layers->length - 1; + else if (i == g_project->_->layers->length - 1 && mouse_y < absy + step) { + g_context->drag_dest = g_project->_->layers->length - 1; if (slot_layer_can_move(g_context->layer, g_context->drag_dest)) { ui_fill(checkw, 0, (ui->_window_w / (float)UI_SCALE() - 2) - checkw, 2 * UI_SCALE(), ui->ops->theme->HIGHLIGHT_COL); } @@ -965,9 +965,9 @@ void tab_layers_draw_layer_slot(slot_layer_t *l, i32 i, bool mini) { ui_fill(checkw, 2 * step, (ui->_window_w / (float)UI_SCALE() - 2) - checkw, 2 * UI_SCALE(), ui->ops->theme->HIGHLIGHT_COL); } } - else if (i == project_layers->length - 1 && mouse_y < absy + step) { - g_context->drag_dest = project_layers->length; - if (tab_layers_can_drop_new_layer(project_layers->length)) { + else if (i == g_project->_->layers->length - 1 && mouse_y < absy + step) { + g_context->drag_dest = g_project->_->layers->length; + if (tab_layers_can_drop_new_layer(g_project->_->layers->length)) { ui_fill(checkw, 0, (ui->_window_w / (float)UI_SCALE() - 2) - checkw, 2 * UI_SCALE(), ui->ops->theme->HIGHLIGHT_COL); } } @@ -982,12 +982,12 @@ void tab_layers_draw_layer_slot(slot_layer_t *l, i32 i, bool mini) { } void tab_layers_draw_slots(bool mini) { - for (i32 i = 0; i < project_layers->length; ++i) { - if (i >= project_layers->length) { + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + if (i >= g_project->_->layers->length) { break; // Layer was deleted } - i32 j = project_layers->length - 1 - i; - slot_layer_t *l = project_layers->buffer[j]; + i32 j = g_project->_->layers->length - 1 - i; + slot_layer_t *l = g_project->_->layers->buffer[j]; tab_layers_draw_layer_slot(l, j, mini); } } @@ -1057,8 +1057,8 @@ void tab_layers_button_new_menu() { 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]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *mat = g_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); @@ -1074,8 +1074,8 @@ void tab_layers_button_new_menu() { 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]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *mat = g_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); @@ -1091,8 +1091,8 @@ void tab_layers_button_new_menu() { 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]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *mat = g_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); @@ -1119,11 +1119,11 @@ void tab_layers_button_new_menu() { i32_map_t *pointers = tab_layers_init_layer_map(); slot_layer_t *group = layers_new_group(); context_set_layer(l); - array_remove(project_layers, group); - array_insert(project_layers, array_index_of(project_layers, l) + 1, group); + array_remove(g_project->_->layers, group); + array_insert(g_project->_->layers, array_index_of(g_project->_->layers, l) + 1, group); l->parent = group; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; tab_layers_remap_layer_pointers(m->canvas->nodes, tab_layers_fill_layer_map(pointers)); } context_set_layer(group); @@ -1141,26 +1141,26 @@ void tab_layers_button_new(char *text) { void tab_layers_apply_filter(i32 filter) { g_context->layer_filter = filter; char *filter_name = NULL; - if (filter > 0 && filter <= project_paint_objects->length) { - filter_name = project_paint_objects->buffer[filter - 1]->base->name; + if (filter > 0 && filter <= g_project->_->paint_objects->length) { + filter_name = g_project->_->paint_objects->buffer[filter - 1]->base->name; } - else if (filter > project_paint_objects->length) { + else if (filter > g_project->_->paint_objects->length) { string_array_t *atlases = project_get_used_atlases(); if (atlases != NULL) { - filter_name = atlases->buffer[filter - project_paint_objects->length - 1]; + filter_name = atlases->buffer[filter - g_project->_->paint_objects->length - 1]; } } - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; p->base->visible = filter == 0 || (filter_name != NULL && string_equals(p->base->name, filter_name)) || project_is_atlas_object(p); } if (filter == 0 && g_context->merged_object_is_atlas) { util_mesh_merge(NULL); } - else if (filter > project_paint_objects->length) { + else if (filter > g_project->_->paint_objects->length) { mesh_object_t_array_t *visibles = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; if (p->base->visible) { any_array_push(visibles, p); } @@ -1179,8 +1179,8 @@ void tab_layers_combo_filter() { tr("All"), }, 1); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; any_array_push(ar, p->base->name); } string_array_t *atlases = project_get_used_atlases(); @@ -1247,9 +1247,9 @@ void tab_layers_draw_full(ui_handle_t *htab) { if (in_focus) { // Layer selection if (ui->is_key_pressed && ui->key_code == KEY_CODE_UP) { - i32 i = array_index_of(project_layers, g_context->layer); - while (++i < project_layers->length) { - slot_layer_t *candidate = project_layers->buffer[i]; + i32 i = array_index_of(g_project->_->layers, g_context->layer); + while (++i < g_project->_->layers->length) { + slot_layer_t *candidate = g_project->_->layers->buffer[i]; if (candidate->parent != NULL && !candidate->parent->show_panel) continue; if (candidate->parent != NULL && candidate->parent->parent != NULL && !candidate->parent->parent->show_panel) @@ -1260,9 +1260,9 @@ void tab_layers_draw_full(ui_handle_t *htab) { } } if (ui->is_key_pressed && ui->key_code == KEY_CODE_DOWN) { - i32 i = array_index_of(project_layers, g_context->layer); + i32 i = array_index_of(g_project->_->layers, g_context->layer); while (--i >= 0) { - slot_layer_t *candidate = project_layers->buffer[i]; + slot_layer_t *candidate = g_project->_->layers->buffer[i]; if (candidate->parent != NULL && !candidate->parent->show_panel) continue; if (candidate->parent != NULL && candidate->parent->parent != NULL && !candidate->parent->parent->show_panel) @@ -1302,8 +1302,8 @@ void tab_layers_remap_layer_pointers(ui_node_t_array_t *nodes, i32_imap_t *point i32_map_t *tab_layers_init_layer_map() { i32_map_t *res = any_map_create(); - for (i32 i = 0; i < project_layers->length; ++i) { - i32_map_set(res, project_layers->buffer[i], i); + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + i32_map_set(res, g_project->_->layers->buffer[i], i); } return res; } @@ -1313,7 +1313,7 @@ i32_imap_t *tab_layers_fill_layer_map(i32_map_t *map) { string_array_t *keys = map_keys(map); for (i32 i = 0; i < keys->length; ++i) { char *l = keys->buffer[i]; - i32_imap_set(res, i32_map_get(map, l), array_index_of(project_layers, l) > -1 ? array_index_of(project_layers, l) : 9999); + i32_imap_set(res, i32_map_get(map, l), array_index_of(g_project->_->layers, l) > -1 ? array_index_of(g_project->_->layers, l) : 9999); } return res; } @@ -1333,7 +1333,7 @@ void tab_layers_make_mask_preview_rgba32(slot_layer_t *l) { } bool tab_layers_can_drop_new_layer(i32 position) { - if (position > 0 && position < project_layers->length && slot_layer_is_mask(project_layers->buffer[position - 1])) { + if (position > 0 && position < g_project->_->layers->length && slot_layer_is_mask(g_project->_->layers->buffer[position - 1])) { // 1. The layer to insert is inserted in the middle // 2. The layer below is a mask, i.e. the layer would have to be a (group) mask, too. return false; diff --git a/paint/sources/ui/tab_materials.c b/paint/sources/ui/tab_materials.c index 20df5ce4..8cf969eb 100644 --- a/paint/sources/ui/tab_materials.c +++ b/paint/sources/ui/tab_materials.c @@ -34,9 +34,9 @@ void tab_materials_update_material() { void tab_materials_draw_slots_duplicate(void *_) { i32 i = _tab_materials_draw_slots; - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); - any_array_push(project_materials, g_context->material); - ui_node_canvas_t *cloned = util_clone_canvas(project_materials->buffer[i]->canvas); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); + any_array_push(g_project->_->materials, g_context->material); + ui_node_canvas_t *cloned = util_clone_canvas(g_project->_->materials->buffer[i]->canvas); g_context->material->canvas = cloned; tab_materials_update_material(); history_duplicate_material(); @@ -57,19 +57,19 @@ void tab_materials_update_material_pointers(ui_node_t_array_t *nodes, i32 i) { } void tab_materials_delete_material(slot_material_t *m) { - i32 i = array_index_of(project_materials, m); - for (i32 i = 0; i < project_layers->length; ++i) { - slot_layer_t *l = project_layers->buffer[i]; + i32 i = array_index_of(g_project->_->materials, m); + for (i32 i = 0; i < g_project->_->layers->length; ++i) { + slot_layer_t *l = g_project->_->layers->buffer[i]; if (l->fill_material == m) { l->fill_material = NULL; } } history_delete_material(); - context_select_material(i == project_materials->length - 1 ? i - 1 : i + 1); - array_splice(project_materials, i, 1); + context_select_material(i == g_project->_->materials->length - 1 ? i - 1 : i + 1); + array_splice(g_project->_->materials, i, 1); ui_base_hwnds->buffer[1]->redraws = 2; - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; tab_materials_update_material_pointers(m->canvas->nodes, i); } for (i32 i = 0; i < m->canvas->nodes->length; ++i) { @@ -80,7 +80,7 @@ void tab_materials_delete_material(slot_material_t *m) { void tab_materials_draw_slots_menu() { i32 i = _tab_materials_draw_slots; - slot_material_t *m = project_materials->buffer[i]; + slot_material_t *m = g_project->_->materials->buffer[i]; if (ui_menu_button(tr("To Fill Layer"), "", ICON_SPHERE)) { context_select_material(i); @@ -101,7 +101,7 @@ void tab_materials_draw_slots_menu() { sys_notify_on_next_frame(&tab_materials_draw_slots_duplicate, NULL); } - if (project_materials->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) { + if (g_project->_->materials->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) { tab_materials_delete_material(m); } @@ -186,7 +186,7 @@ void tab_materials_draw_slots(bool mini) { f32 uiy = 0.0; i32 imgw_val = math_floor(50 * UI_SCALE()); - for (i32 row = 0; row < math_floor(math_ceil(project_materials->length / (float)num)); ++row) { + for (i32 row = 0; row < math_floor(math_ceil(g_project->_->materials->length / (float)num)); ++row) { i32 mult = g_config->show_asset_names ? 2 : 1; f32_array_t *ar = f32_array_create_from_raw((f32[]){}, 0); for (i32 i = 0; i < num * mult; ++i) { @@ -203,18 +203,18 @@ void tab_materials_draw_slots(bool mini) { for (i32 j = 0; j < num; ++j) { i32 imgw = math_floor(50 * UI_SCALE()); i32 i = j + row * num; - if (i >= project_materials->length) { + if (i >= g_project->_->materials->length) { ui_end_element_of_size(imgw); if (g_config->show_asset_names) { ui_end_element_of_size(0); } continue; } - gpu_texture_t *img = UI_SCALE() > 1 ? project_materials->buffer[i]->image : project_materials->buffer[i]->image_icon; - gpu_texture_t *img_full = project_materials->buffer[i]->image; + gpu_texture_t *img = UI_SCALE() > 1 ? g_project->_->materials->buffer[i]->image : g_project->_->materials->buffer[i]->image_icon; + gpu_texture_t *img_full = g_project->_->materials->buffer[i]->image; // Highligh selected - if (g_context->material == project_materials->buffer[i]) { + if (g_context->material == g_project->_->materials->buffer[i]) { if (mini) { f32 w = ui->_w / (float)UI_SCALE(); ui_rect(0, -2, w - 2, w - 4, ui->ops->theme->HIGHLIGHT_COL, 3); @@ -239,7 +239,7 @@ void tab_materials_draw_slots(bool mini) { ui_fill(-1, -2, 2, imgw_val + 4, ui->ops->theme->HIGHLIGHT_COL); } - ui_state_t state = project_materials->buffer[i]->preview_ready ? ui_image(img, 0xffffffff, imgh) + ui_state_t state = g_project->_->materials->buffer[i]->preview_ready ? ui_image(img, 0xffffffff, imgh) : ui_sub_image(resource_get("icons.k"), 0xffffffff, -1.0, tile, tile, tile, tile); if (state == UI_STATE_HOVERED && base_drag_material != NULL) { @@ -263,7 +263,7 @@ void tab_materials_draw_slots(bool mini) { // Select material if (state == UI_STATE_STARTED && ui->input_y > ui->_window_y) { - if (g_context->material != project_materials->buffer[i]) { + if (g_context->material != g_project->_->materials->buffer[i]) { context_select_material(i); if (g_context->tool == TOOL_TYPE_MATERIAL) { sys_notify_on_next_frame(&tab_materials_draw_slots_update_fill_layers, NULL); @@ -294,28 +294,28 @@ void tab_materials_draw_slots(bool mini) { ui_tooltip_image(img_full, 0); if (i < 9) { i32 i1 = i + 1; - ui_tooltip(string("%s - (%s %d)", project_materials->buffer[i]->canvas->name, (char *)any_map_get(config_keymap, "select_material"), i1)); + ui_tooltip(string("%s - (%s %d)", g_project->_->materials->buffer[i]->canvas->name, (char *)any_map_get(config_keymap, "select_material"), i1)); } else { - ui_tooltip(project_materials->buffer[i]->canvas->name); + ui_tooltip(g_project->_->materials->buffer[i]->canvas->name); } } if (g_config->show_asset_names) { ui->_x = uix; ui->_y += slotw * 0.9; - ui_text(project_materials->buffer[i]->canvas->name, UI_ALIGN_CENTER, 0x00000000); + ui_text(g_project->_->materials->buffer[i]->canvas->name, UI_ALIGN_CENTER, 0x00000000); if (ui->is_hovered) { if (i < 9) { i32 i1 = i + 1; ui_tooltip( - string("%s - (%s %d)", project_materials->buffer[i]->canvas->name, (char *)any_map_get(config_keymap, "select_material"), i1)); + string("%s - (%s %d)", g_project->_->materials->buffer[i]->canvas->name, (char *)any_map_get(config_keymap, "select_material"), i1)); } else { - ui_tooltip(project_materials->buffer[i]->canvas->name); + ui_tooltip(g_project->_->materials->buffer[i]->canvas->name); } } ui->_y -= slotw * 0.9; - if (i == project_materials->length - 1) { + if (i == g_project->_->materials->length - 1) { ui->_y += j == num - 1 ? imgw : imgw + UI_ELEMENT_H() + UI_ELEMENT_OFFSET(); } } @@ -324,7 +324,7 @@ void tab_materials_draw_slots(bool mini) { ui->_y += mini ? 0 : 6; } - if (base_drag_material != NULL && tab_materials_drag_pos == project_materials->length) { + if (base_drag_material != NULL && tab_materials_drag_pos == g_project->_->materials->length) { ui->_x = uix; ui->_y = uiy; ui_fill(imgw_val + 1, -2, 2, imgw_val + 4, ui->ops->theme->HIGHLIGHT_COL); @@ -336,23 +336,23 @@ void tab_materials_draw_slots(bool mini) { bool in_focus = ui->input_x > ui->_window_x && ui->input_x < ui->_window_x + ui->_window_w && ui->input_y > ui->_window_y && ui->input_y < ui->_window_y + ui->_window_h; - if (in_focus && ui->is_delete_down && project_materials->length > 1) { + if (in_focus && ui->is_delete_down && g_project->_->materials->length > 1) { ui->is_delete_down = false; tab_materials_delete_material(g_context->material); } if (in_focus && ui->is_ctrl_down && ui->is_key_pressed && ui->key_code == KEY_CODE_D) { - _tab_materials_draw_slots = array_index_of(project_materials, g_context->material); + _tab_materials_draw_slots = array_index_of(g_project->_->materials, g_context->material); sys_notify_on_next_frame(&tab_materials_draw_slots_duplicate, NULL); } if (in_focus) { - i32 i = array_index_of(project_materials, g_context->material); + i32 i = array_index_of(g_project->_->materials, g_context->material); if (ui->is_key_pressed && ui->key_code == KEY_CODE_UP) { if (i > 0) { context_select_material(i - 1); } } if (ui->is_key_pressed && ui->key_code == KEY_CODE_DOWN) { - if (i < project_materials->length - 1) { + if (i < g_project->_->materials->length - 1) { context_select_material(i + 1); } } @@ -360,8 +360,8 @@ void tab_materials_draw_slots(bool mini) { } void tab_materials_button_new_on_next_frame(void *_) { - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); - any_array_push(project_materials, g_context->material); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); + any_array_push(g_project->_->materials, g_context->material); tab_materials_update_material(); history_new_material(); } @@ -420,16 +420,16 @@ void tab_materials_accept_material_drop(slot_material_t *material) { return; } - i32 mat_pos = array_index_of(project_materials, material); + i32 mat_pos = array_index_of(g_project->_->materials, material); if (mat_pos != -1 && math_abs(mat_pos - tab_materials_drag_pos) > 0) { - array_remove(project_materials, material); + array_remove(g_project->_->materials, material); i32 new_pos = tab_materials_drag_pos - mat_pos > 0 ? tab_materials_drag_pos - 1 : tab_materials_drag_pos; - array_insert(project_materials, new_pos, material); + array_insert(g_project->_->materials, new_pos, material); } } void tab_materials_accept_swatch_drop(swatch_color_t *swatch) { - g_context->material = slot_material_create(project_materials->buffer[0]->data, NULL); + g_context->material = slot_material_create(g_project->_->materials->buffer[0]->data, NULL); for (i32 i = 0; i < g_context->material->canvas->nodes->length; ++i) { ui_node_t *node = g_context->material->canvas->nodes->buffer[i]; if (string_equals(node->type, "RGB")) { @@ -444,7 +444,7 @@ void tab_materials_accept_swatch_drop(swatch_color_t *swatch) { node->inputs->buffer[7]->default_value->buffer[0] = swatch->height; } } - any_array_push(project_materials, g_context->material); + any_array_push(g_project->_->materials, g_context->material); tab_materials_update_material(); history_new_material(); } diff --git a/paint/sources/ui/tab_meshes.c b/paint/sources/ui/tab_meshes.c index f51b360c..fae04fc9 100644 --- a/paint/sources/ui/tab_meshes.c +++ b/paint/sources/ui/tab_meshes.c @@ -15,16 +15,16 @@ void tab_meshes_draw_context_menu_delete_next_frame(mesh_object_t *o) { } void tab_meshes_draw_context_menu_delete(mesh_object_t *o) { - array_remove(project_paint_objects, o); + array_remove(g_project->_->paint_objects, o); while (o->base->children->length > 0) { object_t *child = o->base->children->buffer[0]; object_set_parent(child, NULL); - if (project_paint_objects->buffer[0]->base != child) { - object_set_parent(child, project_paint_objects->buffer[0]->base); + if (g_project->_->paint_objects->buffer[0]->base != child) { + object_set_parent(child, g_project->_->paint_objects->buffer[0]->base); } if (o->base->children->length == 0) { - project_paint_objects->buffer[0]->base->transform->scale = o->base->transform->scale; - transform_build_matrix(project_paint_objects->buffer[0]->base->transform); + g_project->_->paint_objects->buffer[0]->base->transform->scale = o->base->transform->scale; + transform_build_matrix(g_project->_->paint_objects->buffer[0]->base->transform); } } sys_notify_on_next_frame(tab_meshes_draw_context_menu_delete_next_frame, o); @@ -36,13 +36,13 @@ static char *f32_to_string2(float f) { void tab_meshes_draw_context_menu() { i32 i = _tab_meshes_draw_i; - mesh_object_t *o = project_paint_objects->buffer[i]; + mesh_object_t *o = g_project->_->paint_objects->buffer[i]; if (ui_menu_button(tr("Export"), "", ICON_EXPORT)) { g_context->export_mesh_index = i + 1; box_export_show_mesh(); } - if (project_paint_objects->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) { + if (g_project->_->paint_objects->length > 1 && ui_menu_button(tr("Delete"), "delete", ICON_DELETE)) { sys_notify_on_next_frame(tab_meshes_draw_context_menu_delete, o); } if (ui_menu_button(tr("Duplicate"), "ctrl+d", ICON_DUPLICATE)) { @@ -281,7 +281,7 @@ void tab_meshes_draw_edit() { } if (ui_menu_button(tr("Apply Displacement"), "", ICON_NONE)) { - util_mesh_apply_displacement(project_layers->buffer[0]->texpaint_pack, 0.1, 1.0); + util_mesh_apply_displacement(g_project->_->layers->buffer[0]->texpaint_pack, 0.1, 1.0); util_mesh_calc_normals(false); g_context->ddirty = 2; } @@ -350,19 +350,19 @@ void tab_meshes_append_shape(char *mesh_name) { // util_mesh_pack_uvs(raw->vertex_arrays->buffer[2]->values); mesh_data_t *md = mesh_data_create(raw); md->_->handle = md->name; - mesh_object_t *mo = scene_add_mesh_object(md, project_paint_objects->buffer[0]->material, NULL); + mesh_object_t *mo = scene_add_mesh_object(md, g_project->_->paint_objects->buffer[0]->material, NULL); mo->base->name = md->name; obj_t *o = GC_ALLOC_INIT(obj_t, {0}); o->_ = GC_ALLOC_INIT(obj_runtime_t, {._gc = scene_raw}); mo->base->raw = o; any_map_set(data_cached_meshes, md->_->handle, md); - any_array_push(project_paint_objects, mo); + any_array_push(g_project->_->paint_objects, mo); } void tab_meshes_draw_append_shape() { - for (i32 i = 0; i < project_mesh_list->length; ++i) { - if (ui_menu_button(project_mesh_list->buffer[i], "", ICON_NONE)) { - tab_meshes_append_shape(project_mesh_list->buffer[i]); + for (i32 i = 0; i < project_default_mesh_list->length; ++i) { + if (ui_menu_button(project_default_mesh_list->buffer[i], "", ICON_NONE)) { + tab_meshes_append_shape(project_default_mesh_list->buffer[i]); } } } @@ -563,7 +563,7 @@ void tab_meshes_draw(ui_handle_t *htab) { f32 uix = 0.0; f32 uiy = 0.0; - for (i32 row = 0; row < math_floor(math_ceil(project_paint_objects->length / (float)num)); ++row) { + for (i32 row = 0; row < math_floor(math_ceil(g_project->_->paint_objects->length / (float)num)); ++row) { f32_array_t *ar = f32_array_create_from_raw((f32[]){}, 0); for (i32 i = 0; i < num * 2; ++i) { f32_array_push(ar, 1 / (float)num); @@ -578,13 +578,13 @@ void tab_meshes_draw(ui_handle_t *htab) { for (i32 j = 0; j < num; ++j) { i32 imgw = math_floor(75 * UI_SCALE()); i32 i = j + row * num; - if (i >= project_paint_objects->length) { + if (i >= g_project->_->paint_objects->length) { ui_end_element_of_size(imgw); ui_end_element_of_size(0); continue; } - mesh_object_t *o = project_paint_objects->buffer[i]; + mesh_object_t *o = g_project->_->paint_objects->buffer[i]; uix = ui->_x; uiy = ui->_y; @@ -656,8 +656,8 @@ void tab_meshes_draw(ui_handle_t *htab) { if (h->changed) { mesh_object_t_array_t *visibles = any_array_create_from_raw((void *[]){}, 0); - for (i32 k = 0; k < project_paint_objects->length; ++k) { - mesh_object_t *p = project_paint_objects->buffer[k]; + for (i32 k = 0; k < g_project->_->paint_objects->length; ++k) { + mesh_object_t *p = g_project->_->paint_objects->buffer[k]; if (p->base->visible) { any_array_push(visibles, p); } @@ -667,7 +667,7 @@ void tab_meshes_draw(ui_handle_t *htab) { } ui->_y -= slotw * 0.9 + 8; - if (i == project_paint_objects->length - 1) { + if (i == g_project->_->paint_objects->length - 1) { ui->_y += j == num - 1 ? imgw : imgw + UI_ELEMENT_H() + UI_ELEMENT_OFFSET(); } } diff --git a/paint/sources/ui/tab_plugins.c b/paint/sources/ui/tab_plugins.c index 673a7a40..023020c6 100644 --- a/paint/sources/ui/tab_plugins.c +++ b/paint/sources/ui/tab_plugins.c @@ -35,7 +35,7 @@ void tab_plugins_draw(ui_handle_t *htab) { void proc_uv_unwrap(void *mesh); void plugin_uv_unwrap_button() { - util_mesh_merge(project_paint_objects); + util_mesh_merge(g_project->_->paint_objects); if (g_context->merged_object == NULL) { return; } @@ -65,8 +65,8 @@ void plugin_uv_unwrap_button() { i32 ioff = 0; f32 max_scale = mmd->scale_pos; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_data_t *md = project_paint_objects->buffer[i]->data; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_data_t *md = g_project->_->paint_objects->buffer[i]->data; i32 ilen = md->index_array->length; f32 rescale = max_scale / md->scale_pos; diff --git a/paint/sources/ui/tab_textures.c b/paint/sources/ui/tab_textures.c index cd5698c6..04a6ae50 100644 --- a/paint/sources/ui/tab_textures.c +++ b/paint/sources/ui/tab_textures.c @@ -73,9 +73,9 @@ void tab_textures_delete_texture_on_next_frame(void *_) { } void tab_textures_delete_texture(asset_t *asset) { - i32 index = array_index_of(project_assets, asset); - if (project_assets->length > 1) { - g_context->texture = project_assets->buffer[index == project_assets->length - 1 ? index - 1 : index + 1]; + i32 index = array_index_of(g_project->_->assets, asset); + if (g_project->_->assets->length > 1) { + g_context->texture = g_project->_->assets->buffer[index == g_project->_->assets->length - 1 ? index - 1 : index + 1]; } ui_base_hwnds->buffer[TAB_AREA_STATUS]->redraws = 2; @@ -101,16 +101,16 @@ void tab_textures_delete_texture(asset_t *asset) { } data_delete_image(asset->file); - array_splice(project_assets, index, 1); + array_splice(g_project->_->assets, index, 1); sys_notify_on_next_frame(&tab_textures_delete_texture_on_next_frame, NULL); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; tab_textures_update_texture_pointers(m->canvas->nodes, index); } - for (i32 i = 0; i < project_brushes->length; ++i) { - slot_brush_t *b = project_brushes->buffer[i]; + for (i32 i = 0; i < g_project->_->brushes->length; ++i) { + slot_brush_t *b = g_project->_->brushes->buffer[i]; tab_textures_update_texture_pointers(b->canvas->nodes, index); } } @@ -182,7 +182,7 @@ void tab_textures_draw(ui_handle_t *htab) { ui_end_sticky(); - if (project_assets->length > 0) { + if (g_project->_->assets->length > 0) { i32 slotw = math_floor(52 * UI_SCALE()); i32 num = math_floor(ui->_window_w / (float)slotw); @@ -195,7 +195,7 @@ void tab_textures_draw(ui_handle_t *htab) { f32 uiy = 0.0; i32 imgw_val = math_floor(50 * UI_SCALE()); - for (i32 row = 0; row < math_floor(math_ceil(project_assets->length / (float)num)); ++row) { + for (i32 row = 0; row < math_floor(math_ceil(g_project->_->assets->length / (float)num)); ++row) { i32 mult = g_config->show_asset_names ? 2 : 1; f32_array_t *ar = f32_array_create_from_raw((f32[]){}, 0); for (i32 i = 0; i < num * mult; ++i) { @@ -212,7 +212,7 @@ void tab_textures_draw(ui_handle_t *htab) { for (i32 j = 0; j < num; ++j) { i32 imgw = math_floor(50 * UI_SCALE()); i32 i = j + row * num; - if (i >= project_assets->length) { + if (i >= g_project->_->assets->length) { ui_end_element_of_size(imgw); if (g_config->show_asset_names) { ui_end_element_of_size(0); @@ -220,7 +220,7 @@ void tab_textures_draw(ui_handle_t *htab) { continue; } - asset_t *asset = project_assets->buffer[i]; + asset_t *asset = g_project->_->assets->buffer[i]; gpu_texture_t *img = project_get_image(asset); if (img == NULL) { render_target_t *empty_rt = any_map_get(render_path_render_targets, "empty_black"); @@ -303,19 +303,19 @@ void tab_textures_draw(ui_handle_t *htab) { if (g_config->show_asset_names) { ui->_x = uix; ui->_y += slotw * 0.9; - ui_text(project_assets->buffer[i]->name, UI_ALIGN_CENTER, 0x00000000); + ui_text(g_project->_->assets->buffer[i]->name, UI_ALIGN_CENTER, 0x00000000); if (ui->is_hovered) { - ui_tooltip(project_assets->buffer[i]->name); + ui_tooltip(g_project->_->assets->buffer[i]->name); } ui->_y -= slotw * 0.9; - if (i == project_assets->length - 1) { + if (i == g_project->_->assets->length - 1) { ui->_y += j == num - 1 ? imgw : imgw + UI_ELEMENT_H() + UI_ELEMENT_OFFSET(); } } } } - if (base_drag_asset != NULL && tab_textures_drag_pos == project_assets->length) { + if (base_drag_asset != NULL && tab_textures_drag_pos == g_project->_->assets->length) { ui->_x = uix; ui->_y = uiy; ui_fill(imgw_val + 1, -2, 2, imgw_val + 4, ui->ops->theme->HIGHLIGHT_COL); @@ -336,20 +336,20 @@ void tab_textures_draw(ui_handle_t *htab) { bool in_focus = ui->input_x > ui->_window_x && ui->input_x < ui->_window_x + ui->_window_w && ui->input_y > ui->_window_y && ui->input_y < ui->_window_y + ui->_window_h; - if (in_focus && ui->is_delete_down && project_assets->length > 0 && array_index_of(project_assets, g_context->texture) >= 0) { + if (in_focus && ui->is_delete_down && g_project->_->assets->length > 0 && array_index_of(g_project->_->assets, g_context->texture) >= 0) { ui->is_delete_down = false; tab_textures_delete_texture(g_context->texture); } - if (in_focus && project_assets->length > 0) { - i32 i = array_index_of(project_assets, g_context->texture); + if (in_focus && g_project->_->assets->length > 0) { + i32 i = array_index_of(g_project->_->assets, g_context->texture); if (ui->is_key_pressed && ui->key_code == KEY_CODE_UP) { if (i > 0) { - g_context->texture = project_assets->buffer[i - 1]; + g_context->texture = g_project->_->assets->buffer[i - 1]; } } if (ui->is_key_pressed && ui->key_code == KEY_CODE_DOWN) { - if (i < project_assets->length - 1) { - g_context->texture = project_assets->buffer[i + 1]; + if (i < g_project->_->assets->length - 1) { + g_context->texture = g_project->_->assets->buffer[i + 1]; } } } @@ -379,17 +379,17 @@ void tab_textures_accept_asset_drop(asset_t *asset) { return; } - i32 asset_pos = array_index_of(project_assets, asset); + i32 asset_pos = array_index_of(g_project->_->assets, asset); if (asset_pos != -1 && math_abs(asset_pos - tab_textures_drag_pos) > 0) { - array_remove(project_assets, asset); + array_remove(g_project->_->assets, asset); i32 new_pos = tab_textures_drag_pos - asset_pos > 0 ? tab_textures_drag_pos - 1 : tab_textures_drag_pos; - array_insert(project_assets, new_pos, asset); + array_insert(g_project->_->assets, new_pos, asset); - for (i32 i = 0; i < project_materials->length; ++i) { - tab_textures_remap_node_indices(project_materials->buffer[i]->canvas->nodes, asset_pos, new_pos); + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + tab_textures_remap_node_indices(g_project->_->materials->buffer[i]->canvas->nodes, asset_pos, new_pos); } - for (i32 i = 0; i < project_brushes->length; ++i) { - tab_textures_remap_node_indices(project_brushes->buffer[i]->canvas->nodes, asset_pos, new_pos); + for (i32 i = 0; i < g_project->_->brushes->length; ++i) { + tab_textures_remap_node_indices(g_project->_->brushes->buffer[i]->canvas->nodes, asset_pos, new_pos); } if (g_context->colorid == asset_pos) { g_context->colorid = new_pos; diff --git a/paint/sources/ui/tab_timeline.c b/paint/sources/ui/tab_timeline.c index b19914c3..671daa6e 100644 --- a/paint/sources/ui/tab_timeline.c +++ b/paint/sources/ui/tab_timeline.c @@ -172,8 +172,8 @@ static void tab_timeline_save_origins() { gpu_texture_format_t fmt = tab_timeline_tex_format(); i32 w = config_get_texture_res_x(); i32 h = config_get_texture_res_y(); - for (i32 li = 0; li < project_layers->length; li++) { - slot_layer_t *l = project_layers->buffer[li]; + for (i32 li = 0; li < g_project->_->layers->length; li++) { + slot_layer_t *l = g_project->_->layers->buffer[li]; if (!slot_layer_is_layer(l)) { continue; } @@ -198,12 +198,12 @@ static void tab_timeline_save_origins() { } static void tab_timeline_load_origins() { - for (i32 li = 0; li < project_layers->length; li++) { + for (i32 li = 0; li < g_project->_->layers->length; li++) { i32 oi = tab_timeline_find_origin(li); if (oi < 0) { continue; } - slot_layer_t *l = project_layers->buffer[li]; + slot_layer_t *l = g_project->_->layers->buffer[li]; tab_timeline_origin_t *o = tab_timeline_origins->buffer[oi]; if (slot_layer_is_layer(l)) { tab_timeline_copy_tex(l->texpaint, o->texpaint); @@ -217,12 +217,12 @@ static void tab_timeline_load_origins() { } static void tab_timeline_save_to_keyframes(i32 frame) { - for (i32 li = 0; li < project_layers->length; li++) { + for (i32 li = 0; li < g_project->_->layers->length; li++) { i32 kfi = tab_timeline_find_keyframe(frame, li); if (kfi < 0) { continue; } - slot_layer_t *l = project_layers->buffer[li]; + slot_layer_t *l = g_project->_->layers->buffer[li]; tab_timeline_keyframe_t *kf = tab_timeline_keyframes->buffer[kfi]; if (slot_layer_is_layer(l)) { tab_timeline_copy_tex(kf->texpaint, l->texpaint); @@ -235,8 +235,8 @@ static void tab_timeline_save_to_keyframes(i32 frame) { static void tab_timeline_load_from_keyframes(i32 frame) { bool any = false; - for (i32 li = 0; li < project_layers->length; li++) { - slot_layer_t *l = project_layers->buffer[li]; + for (i32 li = 0; li < g_project->_->layers->length; li++) { + slot_layer_t *l = g_project->_->layers->buffer[li]; if (!slot_layer_is_layer(l)) { continue; } @@ -270,8 +270,8 @@ static void tab_timeline_load_from_keyframes(i32 frame) { static void tab_timeline_tween_from_keyframes(f32 frame_f) { bool any = false; i32 frame_i = (i32)frame_f; - for (i32 li = 0; li < project_layers->length; li++) { - slot_layer_t *l = project_layers->buffer[li]; + for (i32 li = 0; li < g_project->_->layers->length; li++) { + slot_layer_t *l = g_project->_->layers->buffer[li]; if (!slot_layer_is_layer(l)) { continue; } @@ -375,8 +375,8 @@ static i32 tab_timeline_find_next_mesh_keyframe(i32 frame, i32 mesh_index) { } static void tab_timeline_save_mesh_origins() { - for (i32 mi = 0; mi < project_paint_objects->length; mi++) { - mesh_object_t *o = project_paint_objects->buffer[mi]; + for (i32 mi = 0; mi < g_project->_->paint_objects->length; mi++) { + mesh_object_t *o = g_project->_->paint_objects->buffer[mi]; i32 oi = tab_timeline_find_mesh_origin(mi); tab_timeline_mesh_origin_t *orig; if (oi < 0) { @@ -392,26 +392,26 @@ static void tab_timeline_save_mesh_origins() { } static void tab_timeline_load_mesh_origins() { - for (i32 mi = 0; mi < project_paint_objects->length; mi++) { + for (i32 mi = 0; mi < g_project->_->paint_objects->length; mi++) { i32 oi = tab_timeline_find_mesh_origin(mi); if (oi < 0) { continue; } tab_timeline_mesh_origin_t *orig = tab_timeline_mesh_origins->buffer[oi]; - mesh_object_t *o = project_paint_objects->buffer[mi]; + mesh_object_t *o = g_project->_->paint_objects->buffer[mi]; transform_set_matrix(o->base->transform, orig->transform); } g_context->ddirty = 2; } static void tab_timeline_save_mesh_to_keyframes(i32 frame) { - for (i32 mi = 0; mi < project_paint_objects->length; mi++) { + for (i32 mi = 0; mi < g_project->_->paint_objects->length; mi++) { i32 kfi = tab_timeline_find_mesh_keyframe(frame, mi); if (kfi < 0) { continue; } tab_timeline_mesh_keyframe_t *kf = tab_timeline_mesh_keyframes->buffer[kfi]; - mesh_object_t *o = project_paint_objects->buffer[mi]; + mesh_object_t *o = g_project->_->paint_objects->buffer[mi]; kf->transform = o->base->transform->local; } } @@ -419,8 +419,8 @@ static void tab_timeline_save_mesh_to_keyframes(i32 frame) { static void tab_timeline_load_mesh_from_keyframes(float frame_f) { bool any = false; i32 frame_i = (i32)frame_f; - for (i32 mi = 0; mi < project_paint_objects->length; mi++) { - mesh_object_t *o = project_paint_objects->buffer[mi]; + for (i32 mi = 0; mi < g_project->_->paint_objects->length; mi++) { + mesh_object_t *o = g_project->_->paint_objects->buffer[mi]; i32 act_kfi = tab_timeline_find_active_mesh_keyframe(frame_i, mi); i32 nxt_kfi = tab_timeline_find_next_mesh_keyframe(frame_i, mi); @@ -498,10 +498,10 @@ static void tab_timeline_add_keyframe_on_next_frame(void *_) { tab_timeline_pending_kf_frame = -1; tab_timeline_pending_kf_layer = -1; - if (fr <= 0 || li < 0 || li >= project_layers->length) { + if (fr <= 0 || li < 0 || li >= g_project->_->layers->length) { return; } - slot_layer_t *l = project_layers->buffer[li]; + slot_layer_t *l = g_project->_->layers->buffer[li]; if (!slot_layer_is_layer(l)) { return; } @@ -550,10 +550,10 @@ static void tab_timeline_add_mesh_keyframe_on_next_frame(void *_) { tab_timeline_pending_mesh_add_frame = -1; tab_timeline_pending_mesh_add_index = -1; - if (fr <= 0 || mi < 0 || mi >= project_paint_objects->length) { + if (fr <= 0 || mi < 0 || mi >= g_project->_->paint_objects->length) { return; } - mesh_object_t *o = project_paint_objects->buffer[mi]; + mesh_object_t *o = g_project->_->paint_objects->buffer[mi]; i32 kfi = tab_timeline_find_mesh_keyframe(fr, mi); tab_timeline_mesh_keyframe_t *kf; if (kfi < 0) { @@ -754,12 +754,12 @@ void tab_timeline_import(project_t *raw) { } static char *tab_timeline_row_name(i32 row) { - i32 layer_count = project_layers->length; + i32 layer_count = g_project->_->layers->length; if (row >= layer_count) { - mesh_object_t *o = project_paint_objects->buffer[row - layer_count]; + mesh_object_t *o = g_project->_->paint_objects->buffer[row - layer_count]; return o->base->name; } - slot_layer_t *l = project_layers->buffer[row]; + slot_layer_t *l = g_project->_->layers->buffer[row]; return l->name; } @@ -795,7 +795,7 @@ static void tab_timeline_delete_script(i32 row, i32 frame) { } static bool tab_timeline_can_delete() { - i32 layer_count = project_layers->length; + i32 layer_count = g_project->_->layers->length; bool is_mesh = tab_timeline_selected_row >= layer_count; bool has_kf; if (!is_mesh) { @@ -811,7 +811,7 @@ static bool tab_timeline_can_delete() { } static void tab_timeline_delete_selected() { - i32 layer_count = project_layers->length; + i32 layer_count = g_project->_->layers->length; bool is_mesh = tab_timeline_selected_row >= layer_count; if (!is_mesh) { @@ -832,7 +832,7 @@ static void tab_timeline_run_frame_scripts(i32 frame) { if (g_project->script_names == NULL) { return; } - i32 row_count = project_layers->length + project_paint_objects->length; + i32 row_count = g_project->_->layers->length + g_project->_->paint_objects->length; for (i32 ri = 0; ri < row_count; ri++) { i32 i = string_array_index_of(g_project->script_names, tab_timeline_script_name(ri, frame)); if (i >= 0) { @@ -877,7 +877,7 @@ void tab_timeline_player_update() { } void tab_timeline_draw_frame_context_menu() { - i32 layer_count = project_layers->length; + i32 layer_count = g_project->_->layers->length; bool is_mesh = tab_timeline_selected_row >= layer_count; bool has_kf; i32 mesh_kfi = -1; @@ -967,14 +967,14 @@ void tab_timeline_draw(ui_handle_t *htab) { ui_row(row); if (ui_icon_button(tr("Keyframe"), ICON_PLUS, UI_ALIGN_CENTER)) { i32 li = tab_timeline_selected_row; - if (tab_timeline_selected_frame > 0 && li < project_layers->length && slot_layer_is_layer(project_layers->buffer[li])) { + if (tab_timeline_selected_frame > 0 && li < g_project->_->layers->length && slot_layer_is_layer(g_project->_->layers->buffer[li])) { tab_timeline_pending_kf_frame = tab_timeline_selected_frame; tab_timeline_pending_kf_layer = li; sys_notify_on_next_frame(&tab_timeline_add_keyframe_on_next_frame, NULL); } - else if (tab_timeline_selected_frame > 0 && li >= project_layers->length) { - i32 mi = li - project_layers->length; - if (mi < project_paint_objects->length) { + else if (tab_timeline_selected_frame > 0 && li >= g_project->_->layers->length) { + i32 mi = li - g_project->_->layers->length; + if (mi < g_project->_->paint_objects->length) { tab_timeline_pending_mesh_add_frame = tab_timeline_selected_frame; tab_timeline_pending_mesh_add_index = mi; sys_notify_on_next_frame(&tab_timeline_add_mesh_keyframe_on_next_frame, NULL); @@ -1059,13 +1059,13 @@ void tab_timeline_draw(ui_handle_t *htab) { u32 base_col = ui->ops->theme->BUTTON_COL; u32 bright_col = base_col + 0x00101010; u32 sel_col = ui->ops->theme->HIGHLIGHT_COL; - i32 row_count = project_layers->length; + i32 row_count = g_project->_->layers->length; gpu_texture_t *icons = resource_get("icons.k"); f32 icon_size = strip_h - 2; for (i32 ri = 0; ri < row_count; ri++) { - slot_layer_t *layer = project_layers->buffer[ri]; + slot_layer_t *layer = g_project->_->layers->buffer[ri]; f32 row_y = start_y + font_h + 2 + ri * strip_h; f32 icon_y = row_y + (strip_h - icon_size) / 2.0f; @@ -1121,9 +1121,9 @@ void tab_timeline_draw(ui_handle_t *htab) { } } - i32 mesh_count = project_paint_objects->length; + i32 mesh_count = g_project->_->paint_objects->length; for (i32 mi = 0; mi < mesh_count; mi++) { - mesh_object_t *mesh = project_paint_objects->buffer[mi]; + mesh_object_t *mesh = g_project->_->paint_objects->buffer[mi]; i32 ri = row_count + mi; f32 row_y = start_y + font_h + 2 + ri * strip_h; f32 icon_y = row_y + (strip_h - icon_size) / 2.0f; diff --git a/paint/sources/ui/ui_files.c b/paint/sources/ui/ui_files.c index b566f177..7f7108f0 100644 --- a/paint/sources/ui/ui_files.c +++ b/paint/sources/ui/ui_files.c @@ -87,7 +87,7 @@ void ui_files_file_browser_on_cache_cloud_done_on_next_frame(draw_cloud_icon_dat gpu_texture_t *icon = gpu_create_render_target(data->image->width, data->image->height, GPU_TEXTURE_FORMAT_RGBA32); if (ends_with(data->f, ".arm")) { // Used for material sphere alpha cutout draw_begin(icon, false, 0); - draw_image(project_materials->buffer[0]->image, 0, 0); + draw_image(g_project->_->materials->buffer[0]->image, 0, 0); } else { draw_begin(icon, true, 0xffffffff); @@ -178,8 +178,8 @@ void ui_files_make_icon(ui_files_make_icon_t *args) { ui_base_hwnds->buffer[TAB_AREA_STATUS]->redraws = 3; bool found = false; - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *a = project_assets->buffer[i]; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *a = g_project->_->assets->buffer[i]; if (string_equals(a->file, args->shandle)) { found = true; break; diff --git a/paint/sources/ui/ui_header.c b/paint/sources/ui/ui_header.c index f860aa98..8798a044 100644 --- a/paint/sources/ui/ui_header.c +++ b/paint/sources/ui/ui_header.c @@ -125,7 +125,7 @@ void ui_header_draw_tool_properties_to_mask(slot_layer_t *m) { gpu_set_pipeline(pipes_colorid_to_mask); render_target_t *rt = any_map_get(render_path_render_targets, "texpaint_colorid"); gpu_set_texture(pipes_texpaint_colorid, rt->_image); - gpu_set_texture(pipes_tex_colorid, project_get_image(project_assets->buffer[g_context->colorid])); + gpu_set_texture(pipes_tex_colorid, project_get_image(g_project->_->assets->buffer[g_context->colorid])); gpu_set_vertex_buffer(const_data_screen_aligned_vb); gpu_set_index_buffer(const_data_screen_aligned_ib); gpu_draw(); @@ -139,12 +139,12 @@ void ui_header_draw_tool_properties_to_mask(slot_layer_t *m) { void ui_header_draw_tool_properties_import(char *path) { import_asset_run(path, -1.0, -1.0, true, false, NULL); - g_context->colorid = project_assets->length - 1; - for (i32 i = 0; i < project_assets->length; ++i) { - asset_t *a = project_assets->buffer[i]; + g_context->colorid = g_project->_->assets->length - 1; + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + asset_t *a = g_project->_->assets->buffer[i]; // Already imported if (string_equals(a->file, path)) { - g_context->colorid = array_index_of(project_assets, a); + g_context->colorid = array_index_of(g_project->_->assets, a); } } g_context->ddirty = 2; @@ -167,7 +167,7 @@ void ui_header_draw_tool_properties() { } ui->enabled = true; ui_text(tr("Color ID Map"), UI_ALIGN_LEFT, 0x00000000); - if (project_assets->length > 0) { + if (g_project->_->assets->length > 0) { ui_handle_t *colorid_handle = ui_handle(__ID__); colorid_handle->i = g_context->colorid; g_context->colorid = ui_combo(colorid_handle, base_combo_enum_texts("TEX_IMAGE"), tr("Color ID"), false, UI_ALIGN_LEFT, true); @@ -179,9 +179,9 @@ void ui_header_draw_tool_properties() { g_context->colorid_picked = false; ui_toolbar_handle->redraws = 1; } - ui_image(project_get_image(project_assets->buffer[g_context->colorid]), 0xffffffff, -1.0); + ui_image(project_get_image(g_project->_->assets->buffer[g_context->colorid]), 0xffffffff, -1.0); if (ui->is_hovered) { - ui_tooltip_image(project_get_image(project_assets->buffer[g_context->colorid]), 256); + ui_tooltip_image(project_get_image(g_project->_->assets->buffer[g_context->colorid]), 256); } } if (ui_icon_button(tr("Import"), ICON_FOLDER_OPEN, UI_ALIGN_CENTER)) { diff --git a/paint/sources/ui/ui_nodes.c b/paint/sources/ui/ui_nodes.c index c622df1f..aa0ef68a 100644 --- a/paint/sources/ui/ui_nodes.c +++ b/paint/sources/ui/ui_nodes.c @@ -84,7 +84,7 @@ void ui_nodes_push_undo(ui_node_canvas_t *last_canvas) { } i32 canvas_group = -1; if (ui_nodes_group_stack->length > 0) { - canvas_group = array_index_of(project_material_groups, ui_nodes_group_stack->buffer[ui_nodes_group_stack->length - 1]); + canvas_group = array_index_of(g_project->_->material_groups, ui_nodes_group_stack->buffer[ui_nodes_group_stack->length - 1]); } ui_base_hwnds->buffer[TAB_AREA_SIDEBAR0]->redraws = 2; history_edit_nodes(last_canvas, ui_nodes_canvas_type, canvas_group); @@ -876,8 +876,8 @@ void ui_nodes_draw_menubar() { if (h->changed) { // Check whether renaming is possible and update group links if (ui_nodes_group_stack->length > 0) { bool can_rename = true; - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *m = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *m = g_project->_->material_groups->buffer[i]; if (string_equals(m->canvas->name, new_name)) { can_rename = false; // Name already used } @@ -886,12 +886,12 @@ void ui_nodes_draw_menubar() { char *old_name = c->name; c->name = string_copy(new_name); ui_node_canvas_t_array_t *canvases = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_materials->length; ++i) { - slot_material_t *m = project_materials->buffer[i]; + for (i32 i = 0; i < g_project->_->materials->length; ++i) { + slot_material_t *m = g_project->_->materials->buffer[i]; any_array_push(canvases, m->canvas); } - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *m = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *m = g_project->_->material_groups->buffer[i]; any_array_push(canvases, m->canvas); } for (i32 i = 0; i < canvases->length; ++i) { @@ -988,8 +988,8 @@ bool ui_nodes_can_place_group(char *group_name) { } // Group was deleted / renamed bool group_exists = false; - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *group = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *group = g_project->_->material_groups->buffer[i]; if (string_equals(group_name, group->canvas->name)) { group_exists = true; } @@ -1010,8 +1010,8 @@ ui_node_t *ui_nodes_make_group_node(ui_node_canvas_t *group_canvas, ui_nodes_t * node->y = ui_nodes_get_node_y(); ui_node_t *group_input = NULL; ui_node_t *group_output = NULL; - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; char *cname = g->canvas->name; if (string_equals(cname, node->name)) { for (i32 i = 0; i < g->canvas->nodes->length; ++i) { @@ -1385,7 +1385,7 @@ void ui_nodes_render(void *_) { ui->ops->theme->ELEMENT_H = g_config->touch_ui ? (28 + 2) : 28; ui_menu_h = category->length * UI_ELEMENT_H(); if (is_group_category) { - ui_menu_h += project_material_groups->length * UI_ELEMENT_H(); + ui_menu_h += g_project->_->material_groups->length * UI_ELEMENT_H(); } ui_menu_begin(); for (i32 i = 0; i < category->length; ++i) { @@ -1410,8 +1410,8 @@ void ui_nodes_render(void *_) { } } if (is_group_category) { - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; ui->enabled = ui_nodes_can_place_group(g->canvas->name); f32_array_t *row = f32_array_create_from_raw( (f32[]){ @@ -1436,7 +1436,7 @@ void ui_nodes_render(void *_) { ui->enabled = !project_is_material_group_in_use(g); if (ui_button("x", UI_ALIGN_CENTER, "")) { history_delete_material_group(g); - array_remove(project_material_groups, g); + array_remove(g_project->_->material_groups, g); } ui->enabled = true; } @@ -1467,14 +1467,14 @@ gpu_texture_t *ui_nodes_get_node_preview_image(ui_node_t *n) { gpu_texture_t *img = NULL; if (string_equals(n->type, "LAYER") || string_equals(n->type, "LAYER_MASK")) { i32 id = n->buttons->buffer[0]->default_value->buffer[0]; - if (id < project_layers->length) { - img = project_layers->buffer[id]->texpaint_preview; + if (id < g_project->_->layers->length) { + img = g_project->_->layers->buffer[id]->texpaint_preview; } } else if (string_equals(n->type, "MATERIAL")) { i32 id = n->buttons->buffer[0]->default_value->buffer[0]; - if (id < project_materials->length) { - img = project_materials->buffer[id]->image; + if (id < g_project->_->materials->length) { + img = g_project->_->materials->buffer[id]->image; } } else if (string_equals(n->type, "OUTPUT_MATERIAL_PBR")) { @@ -1488,14 +1488,14 @@ gpu_texture_t *ui_nodes_get_node_preview_image(ui_node_t *n) { if (i <= 9000) { // 9999 - Texture deleted char *filepath = parser_material_enum_data(base_combo_enum_texts(n->type)->buffer[i]); i32 asset_index = -1; - for (i32 i = 0; i < project_assets->length; ++i) { - if (string_equals(project_assets->buffer[i]->file, filepath)) { + for (i32 i = 0; i < g_project->_->assets->length; ++i) { + if (string_equals(g_project->_->assets->buffer[i]->file, filepath)) { asset_index = i; break; } } if (asset_index > -1) { - img = project_get_image(project_assets->buffer[asset_index]); + img = project_get_image(g_project->_->assets->buffer[asset_index]); } } } @@ -1529,7 +1529,7 @@ void ui_nodes_accept_asset_drop(i32 index) { void ui_nodes_accept_layer_drop(i32 index) { ui_nodes_push_undo(NULL); - if (slot_layer_is_group(project_layers->buffer[index])) { + if (slot_layer_is_group(g_project->_->layers->buffer[index])) { return; } node_group_t *g = ui_nodes_group_stack->length > 0 ? ui_nodes_group_stack->buffer[ui_nodes_group_stack->length - 1] : NULL; @@ -1658,8 +1658,8 @@ void ui_nodes_traverse_group(ui_node_canvas_t_array_t *mgroups, ui_node_canvas_t if (string_equals(n->type, "GROUP")) { if (ui_nodes_get_group(mgroups, n->name) == NULL) { ui_node_canvas_t_array_t *canvases = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_material_groups->length; ++i) { - node_group_t *g = project_material_groups->buffer[i]; + for (i32 i = 0; i < g_project->_->material_groups->length; ++i) { + node_group_t *g = g_project->_->material_groups->buffer[i]; any_array_push(canvases, g->canvas); } ui_node_canvas_t *group = ui_nodes_get_group(canvases, n->name); diff --git a/paint/sources/uniforms.c b/paint/sources/uniforms.c index 8b16fd68..96d01b6a 100644 --- a/paint/sources/uniforms.c +++ b/paint/sources/uniforms.c @@ -86,7 +86,7 @@ f32 uniforms_ext_f32_link(object_t *object, material_data_t *mat, char *link) { return val; } else if (string_equals(link, "_object_id")) { - return array_index_of(project_paint_objects, object->ext); + return array_index_of(g_project->_->paint_objects, object->ext); } else if (string_equals(link, "_dilate_radius")) { return util_uv_dilatemap != NULL ? g_config->dilate_radius : 0.0; @@ -332,12 +332,12 @@ gpu_texture_t *uniforms_ext_tex_link(object_t *object, material_data_t *mat, cha return rt->_image; } else if (string_equals(link, "_texcolorid")) { - if (project_assets->length == 0) { + if (g_project->_->assets->length == 0) { render_target_t *rt = any_map_get(render_path_render_targets, "empty_white"); return rt->_image; } else { - return project_get_image(project_assets->buffer[g_context->colorid]); + return project_get_image(g_project->_->assets->buffer[g_context->colorid]); } } else if (string_equals(link, "_textexttool")) { // Opacity map for text @@ -381,15 +381,15 @@ gpu_texture_t *uniforms_ext_tex_link(object_t *object, material_data_t *mat, cha } if (starts_with(link, "_texpaint_vert")) { i32 tid = parse_int(substring(link, string_length(link) - 1, string_length(link))); - return tid < project_layers->length ? project_layers->buffer[tid]->texpaint : NULL; + return tid < g_project->_->layers->length ? g_project->_->layers->buffer[tid]->texpaint : NULL; } if (starts_with(link, "_texpaint_nor")) { i32 tid = parse_int(substring(link, string_length(link) - 1, string_length(link))); - return tid < project_layers->length ? project_layers->buffer[tid]->texpaint_nor : NULL; + return tid < g_project->_->layers->length ? g_project->_->layers->buffer[tid]->texpaint_nor : NULL; } if (starts_with(link, "_texpaint_pack")) { i32 tid = parse_int(substring(link, string_length(link) - 1, string_length(link))); - return tid < project_layers->length ? project_layers->buffer[tid]->texpaint_pack : NULL; + return tid < g_project->_->layers->length ? g_project->_->layers->buffer[tid]->texpaint_pack : NULL; } if (string_equals(link, "_texpaint_sculpt_base")) { render_target_t *rt = any_map_get(render_path_render_targets, "texpaint_sculpt_base"); @@ -397,11 +397,11 @@ gpu_texture_t *uniforms_ext_tex_link(object_t *object, material_data_t *mat, cha } if (starts_with(link, "_texpaint_sculpt")) { i32 tid = parse_int(substring(link, string_length(link) - 1, string_length(link))); - return tid < project_layers->length ? project_layers->buffer[tid]->texpaint_sculpt : NULL; + return tid < g_project->_->layers->length ? g_project->_->layers->buffer[tid]->texpaint_sculpt : NULL; } if (starts_with(link, "_texpaint")) { i32 tid = parse_int(substring(link, string_length(link) - 1, string_length(link))); - return tid < project_layers->length ? project_layers->buffer[tid]->texpaint : NULL; + return tid < g_project->_->layers->length ? g_project->_->layers->buffer[tid]->texpaint : NULL; } if (starts_with(link, "_texblur_")) { char *id = substring(link, 9, string_length(link)); diff --git a/paint/sources/util/util_mesh.c b/paint/sources/util/util_mesh.c index ea94b297..59ba8dbc 100644 --- a/paint/sources/util/util_mesh.c +++ b/paint/sources/util/util_mesh.c @@ -15,19 +15,19 @@ void util_mesh_remove_merged() { mesh_object_t_array_t *util_mesh_get_unique() { mesh_object_t_array_t *ar = any_array_create_from_raw((void *[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - if (!project_paint_objects->buffer[i]->base->visible) { + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + if (!g_project->_->paint_objects->buffer[i]->base->visible) { continue; } bool found = false; for (i32 j = 0; j < i; ++j) { - if (project_paint_objects->buffer[i]->data == project_paint_objects->buffer[j]->data) { + if (g_project->_->paint_objects->buffer[i]->data == g_project->_->paint_objects->buffer[j]->data) { found = true; break; } } if (!found) { - any_array_push(ar, project_paint_objects->buffer[i]); + any_array_push(ar, g_project->_->paint_objects->buffer[i]); } } @@ -40,13 +40,13 @@ void util_mesh_merge(mesh_object_t_array_t *paint_objects) { // paint_objects = util_mesh_get_unique(); // } // else { - paint_objects = project_paint_objects; + paint_objects = g_project->_->paint_objects; // } } if (paint_objects->length == 0) { return; } - g_context->merged_object_is_atlas = paint_objects->length < project_paint_objects->length; + g_context->merged_object_is_atlas = paint_objects->length < g_project->_->paint_objects->length; i32 vlen = 0; i32 ilen = 0; f32 max_scale = 0.0; @@ -150,7 +150,7 @@ void util_mesh_merge(mesh_object_t_array_t *paint_objects) { } void util_mesh_swap_axis(i32 a, i32 b) { - mesh_object_t_array_t *objects = project_paint_objects; + mesh_object_t_array_t *objects = g_project->_->paint_objects; for (i32 i = 0; i < objects->length; ++i) { mesh_object_t *o = objects->buffer[i]; // Remapping vertices, buckle up @@ -179,7 +179,7 @@ void util_mesh_swap_axis(i32 a, i32 b) { } void util_mesh_flip_normals() { - mesh_object_t_array_t *objects = project_paint_objects; + mesh_object_t_array_t *objects = g_project->_->paint_objects; for (i32 i = 0; i < objects->length; ++i) { mesh_object_t *o = objects->buffer[i]; vertex_array_t_array_t *vas = o->data->vertex_arrays; @@ -214,7 +214,7 @@ void util_mesh_calc_normals(bool smooth) { vec4_t vc = (vec4_t){0.0, 0.0, 0.0, 1.0}; vec4_t cb = (vec4_t){0.0, 0.0, 0.0, 1.0}; vec4_t ab = (vec4_t){0.0, 0.0, 0.0, 1.0}; - mesh_object_t_array_t *objects = project_paint_objects; + mesh_object_t_array_t *objects = g_project->_->paint_objects; for (i32 i = 0; i < objects->length; ++i) { mesh_object_t *o = objects->buffer[i]; mesh_data_t *g = o->data; @@ -327,8 +327,8 @@ void util_mesh_to_origin() { f32 dx = 0.0; f32 dy = 0.0; f32 dz = 0.0; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *o = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *o = g_project->_->paint_objects->buffer[i]; i32 l = 4; f32 sc = o->data->scale_pos / 32767.0; i16_array_t *va = o->data->vertex_arrays->buffer[0]->values; @@ -362,12 +362,12 @@ void util_mesh_to_origin() { dy += (miny + maxy) / 2.0 * sc; dz += (minz + maxz) / 2.0 * sc; } - dx /= project_paint_objects->length; - dy /= project_paint_objects->length; - dz /= project_paint_objects->length; + dx /= g_project->_->paint_objects->length; + dy /= g_project->_->paint_objects->length; + dz /= g_project->_->paint_objects->length; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *o = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *o = g_project->_->paint_objects->buffer[i]; mesh_data_t *g = o->data; f32 sc = o->data->scale_pos / 32767.0; i16_array_t *va = o->data->vertex_arrays->buffer[0]->values; @@ -401,7 +401,7 @@ void util_mesh_to_origin() { void util_mesh_apply_displacement(gpu_texture_t *texpaint_pack, f32 strength, f32 uv_scale) { buffer_t *height = gpu_get_texture_pixels(texpaint_pack); i32 res = texpaint_pack->width; - mesh_object_t *o = project_paint_objects->buffer[0]; + mesh_object_t *o = g_project->_->paint_objects->buffer[0]; mesh_data_t *g = o->data; i16_array_t *va0 = g->vertex_arrays->buffer[0]->values; i16_array_t *va1 = g->vertex_arrays->buffer[1]->values; @@ -435,7 +435,7 @@ i32 util_mesh_decimate_sort(i32 *pa, i32 *pb) { } void util_mesh_decimate(f32 strength) { - mesh_object_t_array_t *objects = project_paint_objects; + mesh_object_t_array_t *objects = g_project->_->paint_objects; mesh_object_t *o = objects->buffer[0]; mesh_data_t *g = o->data; i16_array_t *va0 = g->vertex_arrays->buffer[0]->values; @@ -599,7 +599,7 @@ static i32 _util_mesh_subdivide_sort(i32 *pa, i32 *pb) { } void util_mesh_smooth() { - mesh_object_t *o = project_paint_objects->buffer[0]; + mesh_object_t *o = g_project->_->paint_objects->buffer[0]; mesh_data_t *g = o->data; i16_array_t *va0 = g->vertex_arrays->buffer[0]->values; u32_array_t *oinda = g->index_array; @@ -766,7 +766,7 @@ void util_mesh_smooth() { } void util_mesh_bevel(f32 amount) { - mesh_object_t *o = project_paint_objects->buffer[0]; + mesh_object_t *o = g_project->_->paint_objects->buffer[0]; mesh_data_t *g = o->data; i16_array_t *va0 = g->vertex_arrays->buffer[0]->values; i16_array_t *va2 = g->vertex_arrays->buffer[2]->values; @@ -990,7 +990,7 @@ void util_mesh_bevel(f32 amount) { } void util_mesh_subdivide() { - mesh_object_t *o = project_paint_objects->buffer[0]; + mesh_object_t *o = g_project->_->paint_objects->buffer[0]; mesh_data_t *g = o->data; i16_array_t *va0 = g->vertex_arrays->buffer[0]->values; i16_array_t *va2 = g->vertex_arrays->buffer[2]->values; diff --git a/paint/sources/util/util_render.c b/paint/sources/util/util_render.c index 824accc0..91ab0b9e 100644 --- a/paint/sources/util/util_render.c +++ b/paint/sources/util/util_render.c @@ -20,7 +20,7 @@ void util_render_make_material_preview() { mesh_object_t *painto = g_context->paint_object; g_context->paint_object = sphere; - sphere->material = project_materials->buffer[0]->data; + sphere->material = g_project->_->materials->buffer[0]->data; g_context->material->preview_ready = true; g_context->saved_camera = scene_camera->base->transform->local; @@ -276,8 +276,8 @@ void util_render_make_brush_preview() { // Set plane mesh mesh_object_t *painto = g_context->paint_object; u8_array_t *visibles = u8_array_create_from_raw((u8[]){}, 0); - for (i32 i = 0; i < project_paint_objects->length; ++i) { - mesh_object_t *p = project_paint_objects->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + mesh_object_t *p = g_project->_->paint_objects->buffer[i]; u8_array_push(visibles, p->base->visible); p->base->visible = false; } @@ -384,8 +384,8 @@ void util_render_make_brush_preview() { // Restore paint mesh g_context->material_preview = false; planeo->base->visible = false; - for (i32 i = 0; i < project_paint_objects->length; ++i) { - project_paint_objects->buffer[i]->base->visible = visibles->buffer[i]; + for (i32 i = 0; i < g_project->_->paint_objects->length; ++i) { + g_project->_->paint_objects->buffer[i]->base->visible = visibles->buffer[i]; } if (g_context->merged_object != NULL) { g_context->merged_object->base->visible = merged_object_visible; diff --git a/paint/sources/util/util_uv.c b/paint/sources/util/util_uv.c index be4b4310..98369c41 100644 --- a/paint/sources/util/util_uv.c +++ b/paint/sources/util/util_uv.c @@ -26,7 +26,7 @@ void util_uv_cache_uv_map() { util_uv_uvmap_cached = true; i32 mask = slot_layer_get_object_mask(g_context->layer); - mesh_object_t *merged = (mask > 0 && mask <= project_paint_objects->length) ? project_paint_objects->buffer[mask - 1] : g_context->merged_object; + mesh_object_t *merged = (mask > 0 && mask <= g_project->_->paint_objects->length) ? g_project->_->paint_objects->buffer[mask - 1] : g_context->merged_object; mesh_data_t *mesh = (g_context->layer_filter == 0 && merged != NULL) ? merged->data : g_context->paint_object->data; i16_array_t *texa = mesh->vertex_arrays->buffer[2]->values; diff --git a/paint/sources/viewport.c b/paint/sources/viewport.c index 979cceaf..0201e971 100644 --- a/paint/sources/viewport.c +++ b/paint/sources/viewport.c @@ -157,12 +157,12 @@ void viewport_capture_video_update(void *_) { } void viewport_capture_video_begin() { - if (string_equals(project_filepath, "")) { + if (string_equals(g_project->_->filepath, "")) { console_error(tr("Save project first")); return; } viewport_recording = true; - char *path = string("%s/output.mp4", path_base_dir(project_filepath)); + char *path = string("%s/output.mp4", path_base_dir(g_project->_->filepath)); render_target_t *rt = any_map_get(render_path_render_targets, "last"); iron_mp4_begin(path, rt->_image->width, rt->_image->height); sys_notify_on_update(viewport_capture_video_update, NULL);