Files
armorpaint/paint/sources/functions.h
T
2026-05-31 17:33:48 +02:00

732 lines
45 KiB
C

#pragma once
#include "enums.h"
#include "types.h"
#include <iron.h>
f32 ui_MENUBAR_H(ui_t *ui);
f32 ui_nodes_INPUT_Y(ui_node_canvas_t *canvas, ui_node_t *node, i32 pos);
ui_handle_t *ui_handle(char *s);
ui_t *ui_create(ui_options_t *ops);
ui_theme_t *ui_theme_create();
void nodes_on_custom_button(i32 node_id, char *button_name);
ui_nodes_t *ui_nodes_create();
ui_node_socket_t *ui_get_socket(ui_node_t_array_t *nodes, i32 id);
void ui_set_font(ui_t *ui, draw_font_t *font);
gpu_texture_t *tab_swatches_empty_get();
void tab_swatches_draw(ui_handle_t *htab);
void tab_swatches_accept_swatch_drop(swatch_color_t *swatch);
slot_brush_t *slot_brush_create(ui_node_canvas_t *c);
slot_layer_t *slot_layer_create(char *ext, layer_slot_type_t type, slot_layer_t *parent);
void slot_layer_delete(slot_layer_t *raw);
void slot_layer_unload(slot_layer_t *raw);
void slot_layer_swap(slot_layer_t *raw, slot_layer_t *other);
void slot_layer_clear(slot_layer_t *raw, i32 base_color, gpu_texture_t *base_image, f32 occlusion, f32 roughness, f32 metallic);
void slot_layer_invert_mask(slot_layer_t *raw);
void slot_layer_apply_mask(slot_layer_t *raw);
void slot_layer_apply_sculpt(slot_layer_t *raw);
void slot_layer_resize_and_set_bits(slot_layer_t *raw);
void slot_layer_to_fill_layer(slot_layer_t *raw);
void slot_layer_to_paint_layer(slot_layer_t *raw);
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 *slot_layer_get_recursive_children(slot_layer_t *raw);
slot_layer_t_array_t *slot_layer_get_masks(slot_layer_t *raw, bool include_group_masks);
bool slot_layer_has_masks(slot_layer_t *raw, bool include_group_masks);
slot_layer_t_array_t *slot_layer_get_filters(slot_layer_t *raw, bool include_group_filters);
f32 slot_layer_get_opacity(slot_layer_t *raw);
i32 slot_layer_get_object_mask(slot_layer_t *raw);
i32 slot_layer_get_blending(slot_layer_t *raw);
bool slot_layer_is_layer(slot_layer_t *raw);
bool slot_layer_is_path(slot_layer_t *raw);
bool slot_layer_is_group(slot_layer_t *raw);
slot_layer_t *slot_layer_get_containing_group(slot_layer_t *raw);
bool slot_layer_is_filter(slot_layer_t *raw);
bool slot_layer_is_mask(slot_layer_t *raw);
bool slot_layer_is_group_mask(slot_layer_t *raw);
bool slot_layer_is_layer_mask(slot_layer_t *raw);
bool slot_layer_is_in_group(slot_layer_t *raw);
bool slot_layer_can_move(slot_layer_t *raw, i32 to);
void slot_layer_move(slot_layer_t *raw, i32 to);
void layers_init();
void layers_resize();
void layers_set_bits();
void layers_make_temp_img();
void layers_make_temp_mask_img();
void layers_make_export_img();
void layers_commands_merge_pack(gpu_pipeline_t *pipe, gpu_texture_t *i0, gpu_texture_t *i1, gpu_texture_t *i1pack, f32 i1mask_opacity, gpu_texture_t *i1texmask,
i32 i1blending);
bool layers_is_fill_material();
void layers_update_fill_layers();
bool layers_is_path_material();
void layers_update_path_layers();
void layers_update_fill_layer(bool parse_paint);
void layers_update_linked_layers();
void layers_set_object_mask();
slot_layer_t *layers_new_layer(bool clear, i32 position, slot_layer_t *parent);
slot_layer_t *layers_new_mask(bool clear, slot_layer_t *parent, i32 position);
slot_layer_t *layers_new_group();
slot_layer_t *layers_new_path_layer(bool curved);
void layers_create_fill_layer(uv_type_t uv_type, mat4_t decal_mat, i32 position);
void layers_create_image_mask(asset_t *asset);
void layers_create_color_layer(i32 base_color, f32 occlusion, f32 roughness, f32 metallic, i32 position);
void layers_duplicate_layer(slot_layer_t *l);
void layers_merge_down();
slot_layer_t *layers_merge_group(slot_layer_t *l);
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);
void layers_on_resized();
slot_font_t *slot_font_create(char *name, draw_font_t *font, char *file);
scene_t *startup_get_scene(void);
buffer_t *util_encode_scene(scene_t *raw);
buffer_t *util_encode_project(project_t *raw);
void operator_register(char *name, void (*call)(void));
void operator_run(char *name);
void operator_update();
bool operator_shortcut(char *s, shortcut_type_t type);
void render_compass();
void render_compass_update();
void render_envsphere();
void render_pathsphere();
void config_load();
void config_save();
void config_init();
void config_init_layout();
char *config_get_sha();
char *config_get_date();
iron_window_options_t *config_get_options();
void config_restore();
void config_import_from(config_t *from);
void config_apply();
i32 config_get_super_sample_quality(f32 f);
f32 config_get_super_sample_size(i32 i);
i32 config_get_layer_res();
i32 config_get_scene_atlas_res();
i32 config_get_texture_res_x();
i32 config_get_texture_res_y();
i32 config_get_texture_res_pos(i32 i);
void config_load_theme(char *theme, bool tag_redraw);
void config_enable_plugin(char *f);
void config_disable_plugin(char *f);
bool config_is_iphone();
physics_body_t *physics_body_create();
void physics_body_init(physics_body_t *body, object_t *obj);
void physics_body_remove(physics_body_t *body);
void physics_body_apply_impulse(physics_body_t *body, vec4_t dir);
void physics_body_sync_transform(physics_body_t *body);
void physics_body_update(physics_body_t *body);
void box_export_show_textures();
void box_export_show_bake_material();
void box_export_show_mesh();
void box_export_show_material();
void box_export_show_brush();
void box_export_show_player();
void import_blend_mesh_ui();
void import_blend_mesh_run(char *path, bool replace_existing);
void tab_console_draw(ui_handle_t *htab);
void tab_textures_draw(ui_handle_t *htab);
void render_path_forward_init();
void render_path_forward_commands();
void make_bake_run(node_shader_context_t *con, node_shader_t *kong);
void make_bake_position_normal(node_shader_t *kong);
void make_bake_set_color_writes(node_shader_context_t *con_paint);
slot_material_t *slot_material_create(material_data_t *m, ui_node_canvas_t *c);
void slot_material_unload(slot_material_t *raw);
void slot_material_delete(slot_material_t *raw);
void make_clone_run(node_shader_t *kong);
void tab_brushes_draw(ui_handle_t *htab);
void pipes_init();
i32 pipes_get_constant_location(char *type);
void make_brush_run(node_shader_t *kong);
void import_blend_material_run(char *path);
void import_texture_run(char *path, bool hdr_as_envmap);
void import_lut_run(const char *path);
void import_lut_free();
void ui_files_show(char *filters, bool is_save, bool open_multiple, void (*files_done)(char *));
char *ui_files_file_browser(ui_handle_t *handle, bool drag_files, char *search, bool refresh, void (*context_menu)(char *));
void ui_files_go_up(ui_handle_t *handle);
void ui_files_navigate(i32 dx, i32 dy);
void ui_files_enter_selected(ui_handle_t *handle);
void base_init();
i32 base_w();
i32 base_view3d_w();
i32 base_h();
i32 base_x();
i32 base_y();
void base_on_resize();
void base_resize();
void base_update_workspace();
void base_update_workflow();
void base_run_in_player();
string_array_t *base_combo_enum_texts(char *node_type);
any_array_t *base_combo_enum_images(char *node_type);
i32 base_get_asset_index(char *file_name);
void base_toggle_fullscreen();
bool base_is_decal_layer();
void base_redraw_status();
void base_redraw_console();
uint32_t base_darker(uint32_t x, uint32_t y);
void base_redraw_ui();
string_array_t *base_get_viewport_modes();
string_array_t *base_get_viewport_mode_shortcuts();
ui_handle_t_array_t *ui_base_init_hwnds();
ui_handle_t_array_t *ui_base_init_htabs();
tab_draw_array_t_array_t *ui_base_init_hwnd_tabs();
void ui_base_toggle_distract_free();
void ui_base_show_material_nodes();
void ui_base_show_brush_nodes();
void ui_base_show_2d_view(view_2d_type_t type);
void ui_base_show_3d_view();
void ui_base_toggle_browser();
void ui_base_set_icon_scale();
void ui_base_set_viewport_col(i32 col);
void render_gizmo_update();
void util_layer_update_path();
bool util_layer_is_path_point_dragging();
void util_layer_add_path_point(slot_layer_t *l, f32 screen_x, f32 screen_y);
void util_layer_repaint_path(slot_layer_t *l);
void util_layer_clear_path_points(slot_layer_t *l);
void make_texcoord_run(node_shader_t *kong);
void context_init();
void context_select_material(i32 i);
void context_set_material(slot_material_t *m);
void context_select_brush(i32 i);
void context_set_brush(slot_brush_t *b);
void context_select_font(i32 i);
void context_select_layer(i32 i);
void context_set_layer(slot_layer_t *l);
void context_select_tool(i32 i);
void context_init_tool();
void context_select_paint_object(mesh_object_t *o);
mesh_object_t *context_main_object();
bool context_layer_filter_used();
bool context_object_mask_used();
bool context_in_3d_view();
bool context_in_paint_area();
bool context_in_layers();
bool context_in_materials();
bool context_in_2d_view(view_2d_type_t type);
bool context_in_nodes();
bool context_in_swatches();
bool context_in_brushes();
bool context_in_fonts();
bool context_in_textures();
bool context_in_browser();
bool context_is_decal();
bool context_is_decal_mask();
bool context_is_decal_mask_paint();
bool context_is_floating_toolbar();
void context_set_viewport_mode(viewport_mode_t mode);
void context_load_envmap();
void context_update_envmap();
void context_set_viewport_shader(void *viewport_shader);
void context_set_render_path();
bool context_enable_import_plugin(char *file);
void context_set_swatch(swatch_color_t *s);
void node_shader_add_out(node_shader_t *raw, char *s);
void node_shader_add_constant(node_shader_t *raw, char *s, char *link);
void node_shader_add_texture(node_shader_t *raw, char *name, char *link);
void node_shader_add_function(node_shader_t *raw, char *s);
void node_shader_write_vert(node_shader_t *raw, char *s);
void node_shader_write_end_vert(node_shader_t *raw, char *s);
void node_shader_write_attrib_vert(node_shader_t *raw, char *s);
void node_shader_write_frag(node_shader_t *raw, char *s);
void node_shader_write_attrib_frag(node_shader_t *raw, char *s);
char *node_shader_get(node_shader_t *raw);
node_shader_context_t *node_shader_context_create(material_t *material, shader_context_t *props);
void node_shader_context_add_elem(node_shader_context_t *raw, char *name, char *data_type);
bool node_shader_context_is_elem(node_shader_context_t *raw, char *name);
node_shader_t *node_shader_context_make_kong(node_shader_context_t *raw);
void ui_toolbar_init();
i32 ui_toolbar_w(bool screen_size_request);
i32 ui_toolbar_x();
void ui_toolbar_render_ui();
void export_arm_run_mesh(char *path, mesh_object_t_array_t *paint_objects);
void export_arm_run_project();
void export_arm_run_material(char *path);
buffer_t *export_arm_bgra_swap(buffer_t *buffer);
buffer_t *export_arm_bgra64_swap(buffer_t *buffer);
void export_arm_run_brush(char *path);
void export_arm_pack_assets(project_t *raw, asset_t_array_t *assets);
void export_arm_run_swatches(char *path);
void import_asset_run(char *path, f32 drop_x, f32 drop_y, bool show_box, bool hdr_as_envmap, void (*done)(void));
void make_particle_mask(node_shader_t *kong);
void uniforms_ext_init();
void render_path_deferred_init();
void render_path_deferred_commands();
void box_projects_show();
void box_projects_recent_tab();
node_shader_context_t *make_node_preview_run(material_t *data, material_context_t *matcon, ui_node_t *node, ui_node_canvas_t *group,
ui_node_t_array_t *parents);
void history_undo();
void history_redo();
void history_reset();
void history_edit_nodes(ui_node_canvas_t *canvas, i32 canvas_type, i32 canvas_group);
void history_paint();
void history_new_layer();
void history_new_black_mask();
void history_new_white_mask();
void history_new_fill_mask();
void history_new_group();
void history_duplicate_layer();
void history_delete_layer();
void history_clear_layer();
void history_order_layers(i32 prev_order);
void history_merge_layers();
void history_apply_mask();
void history_invert_mask();
void history_to_fill_layer();
void history_to_fill_mask();
void history_to_paint_layer();
void history_to_paint_mask();
void history_layer_opacity();
void history_layer_blending();
void history_new_material();
void history_delete_material();
void history_duplicate_material();
void history_delete_material_group(node_group_t *group);
void tab_scripts_set(char *s);
void tab_scripts_draw(ui_handle_t *htab);
ui_text_coloring_t *tab_scripts_get_text_coloring();
void tab_debug_draw(ui_handle_t *htab);
void render_path_preview_init();
void render_path_preview_commands_preview();
void render_path_preview_commands_decal();
node_shader_context_t *make_paint_run(material_t *data, material_context_t *matcon);
node_shader_context_t *make_mesh_preview_run(material_t *data, material_context_t *matcon);
void import_audio_run(char *path);
void import_mesh_run(char *path, bool _clear_layers, bool replace_existing);
void import_mesh_finish_import(void *_);
void import_mesh_make_mesh(raw_mesh_t *mesh);
void import_mesh_add_mesh(raw_mesh_t *mesh);
mesh_data_t *import_mesh_raw_mesh(raw_mesh_t *mesh);
void ui_menubar_init();
i32 ui_menu_top_y();
void ui_menubar_render_ui();
bool ui_menubar_icon_button(i32 i);
char *_tr(char *s);
char *vtr(char *id, any_map_t *vars);
char *tr(char *id);
void translator_load_translations(char *new_locale);
string_array_t *translator_get_supported_locales();
logic_node_t *logic_node_create(logic_node_ext_t *ext);
void logic_node_add_input(logic_node_t *self, logic_node_ext_t *node, i32 from);
void logic_node_add_outputs(logic_node_t *self, logic_node_t_array_t *nodes);
logic_node_value_t *logic_node_input_get(logic_node_input_t *self);
gpu_texture_t *logic_node_input_get_as_image(logic_node_input_t *self);
void logic_node_input_set(logic_node_input_t *self, f32_array_t *value);
void import_arm_run_project(char *path);
void import_arm_run_material(char *path);
void import_arm_run_brush(char *path);
void import_arm_run_brush_from_project(project_t *project, char *path);
void import_arm_run_swatches(char *path, bool replace_existing);
bool import_arm_has_version(buffer_t *b);
void viewport_scale_to_bounds(f32 bounds);
void viewport_reset();
void viewport_set_view(f32 x, f32 y, f32 z, f32 rx, f32 ry, f32 rz);
void viewport_orbit(f32 x, f32 y);
void viewport_orbit_opposite();
void viewport_zoom(f32 f);
void viewport_update_camera_type(i32 camera_type);
void viewport_capture_screenshot();
void viewport_capture_video_begin();
void viewport_capture_video_end();
void tab_fonts_draw(ui_handle_t *htab);
physics_world_t *physics_world_create();
void physics_world_update(physics_world_t *world);
physics_pair_t_array_t *physics_world_get_contact_pairs(physics_world_t *world, physics_body_t *body);
float physics_world_get_speed(physics_world_t *world, physics_body_t *body);
void ui_menu_render();
void ui_menu_draw(void (*commands)(void), i32 x, i32 y);
void ui_menu_separator();
bool ui_menu_button(char *text, char *label, icon_t icon);
bool ui_icon_button(char *text, icon_t icon, ui_align_t align);
bool ui_menu_sub_button(ui_handle_t *handle, char *text);
void ui_menu_label(char *text, char *shortcut);
void ui_menu_align();
void ui_menu_begin();
void ui_menu_end();
void ui_menu_sub_begin(i32 items);
void ui_menu_sub_end();
void render_path_base_init();
void render_path_base_apply_config();
f32 render_path_base_get_super_sampling();
void render_path_base_commands(void (*draw_commands)(void));
void render_path_base_draw_bloom(char *source, char *target);
void render_path_base_init_ssao();
void render_path_base_draw_ssao();
void render_path_base_draw_deferred_light();
void render_path_base_draw_taa(char *bufa, char *bufb);
void render_path_base_swap_buf(char *bufb);
void render_path_base_draw_gbuffer();
char *strings_arm_file_expected();
char *strings_unknown_asset_format();
char *strings_could_not_locate_texture();
char *strings_failed_to_read_mesh_data();
char *strings_check_internet_connection();
char *strings_asset_already_imported();
char *strings_graphics_api();
void tab_stages_draw(ui_handle_t *htab);
void project_open();
void project_save(bool save_and_quit);
void project_save_as(bool save_and_quit);
void project_fetch_default_meshes();
void project_new_box();
void project_new(bool reset_layers);
void project_set_default_envmap();
void project_import_material();
void project_import_brush();
void project_import_mesh(bool replace_existing, void (*done)(void));
void project_append_mesh();
void project_import_mesh_box(char *path, bool replace_existing, bool clear_layers, void (*done)(void));
void project_reimport_mesh();
void project_unwrap_mesh_box();
void project_import_asset(char *filters, bool hdr_as_envmap);
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);
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);
bool project_packed_asset_exists(packed_asset_t_array_t *packed_assets, char *name);
void project_export_swatches();
swatch_color_t *project_make_swatch(i32 base);
swatch_color_t *project_clone_swatch(swatch_color_t *swatch);
void project_set_default_swatches();
node_group_t *project_get_material_group_by_name(char *group_name);
bool project_is_material_group_in_use(node_group_t *group);
void keymap_load();
void keymap_save();
char *keymap_to_json(any_map_t *keymap);
any_map_t *keymap_get_default();
void ui_view2d_init();
void ui_view2d_render(void *_);
void ui_view2d_update(void *_);
void make_picking_run(node_shader_t *kong);
void sim_init();
void sim_update();
void sim_play();
void sim_stop();
void sim_add_body(object_t *o, physics_shape_t shape, f32 mass);
void sim_remove_body(physics_body_t *pb);
void sim_duplicate();
void sim_delete();
ui_node_link_t *parser_material_get_input_link(ui_node_socket_t *inp);
void parser_material_init();
shader_out_t *parser_material_parse(ui_node_canvas_t *canvas, node_shader_context_t *_con, node_shader_t *_kong, material_context_t *_matcon);
void parser_material_finalize(node_shader_context_t *con);
void parser_material_push_group(ui_node_canvas_t *g);
char *parser_material_parse_group(ui_node_t *node, ui_node_socket_t *socket);
void parser_material_write(node_shader_t *raw, char *s);
char *parser_material_parse_vector_input(ui_node_socket_t *inp);
char *parser_material_parse_value_input(ui_node_socket_t *inp, bool vector_as_grayscale);
char *parser_material_get_coord(ui_node_t *node);
char *parser_material_res_var_name(ui_node_t *node, ui_node_socket_t *socket);
char *parser_material_write_result(ui_node_link_t *l);
char *parser_material_store_var_name(ui_node_t *node);
char *parser_material_vec1(f32 v);
char *parser_material_vec3(f32_array_t *v);
char *parser_material_to_vec3(char *s);
ui_node_t *parser_material_node_by_type(ui_node_t_array_t *nodes, char *ntype);
char *parser_material_node_name(ui_node_t *node, ui_node_t_array_t *_parents);
char *parser_material_enum_data(char *s);
bind_tex_t *parser_material_make_bind_tex(char *tex_name, char *file);
char *u8_array_string_at(u8_array_t *a, i32 i);
void args_parse();
void args_run();
void util_render_make_material_preview();
void util_render_make_decal_preview();
void util_render_make_text_preview();
void util_render_make_font_preview();
void util_render_make_brush_preview();
void util_render_make_node_preview(ui_node_canvas_t *canvas, ui_node_t *node, gpu_texture_t *image, ui_node_canvas_t *group, ui_node_t_array_t *parents);
void util_render_pick_pos_nor_tex();
mat4_t util_render_get_decal_mat();
void tab_materials_draw(ui_handle_t *htab);
void tab_materials_accept_swatch_drop(swatch_color_t *swatch);
void tab_materials_accept_material_drop(slot_material_t *material);
void tab_brushes_accept_brush_drop(slot_brush_t *brush);
void tab_fonts_accept_font_drop(slot_font_t *font);
void tab_textures_accept_asset_drop(asset_t *asset);
void tab_browser_show_directory(char *directory);
void tab_browser_draw(ui_handle_t *htab);
void util_mesh_merge(mesh_object_t_array_t *paint_objects);
void util_mesh_swap_axis(i32 a, i32 b);
void util_mesh_flip_normals();
void util_mesh_calc_normals(bool smooth);
void util_mesh_to_origin();
void util_mesh_apply_displacement(gpu_texture_t *texpaint_pack, f32 strength, f32 uv_scale);
void util_mesh_equirect_unwrap(raw_mesh_t *mesh);
void util_mesh_decimate(f32 strength);
void util_mesh_smooth();
void util_mesh_bevel(f32 amount);
void util_mesh_subdivide();
void util_mesh_pack_uvs(i16_array_t *texa);
void ui_header_init();
void ui_header_render_ui();
void ui_header_draw_tool_properties();
void player_update();
plugin_t *plugin_create();
void plugin_start(char *plugin);
void plugin_stop(char *plugin);
void plugin_notify_on_ui(plugin_t *plugin, void *f);
void plugin_notify_on_update(plugin_t *plugin, void *f);
void plugin_notify_on_delete(plugin_t *plugin, void *f);
void import_plugin_run(char *path);
void parser_logic_parse(ui_node_canvas_t *canvas);
void resource_load(string_array_t *names);
gpu_texture_t *resource_get(char *name);
rect_t *resource_tile50(gpu_texture_t *img, i32 i);
rect_t *resource_tile18(gpu_texture_t *img, i32 i);
bool render_path_raytrace_bake_commands(void (*parse_paint_material)(bool));
void make_material_parse_mesh_material();
void make_material_parse_depth_material();
void make_material_parse_mesh_preview_material();
void make_material_parse_paint_material(bool bake_previews);
void make_material_save_paint_material();
void make_material_restore_paint_material();
parse_node_preview_result_t *make_material_parse_node_preview_material(ui_node_t *node, ui_node_canvas_t *group, ui_node_t_array_t *parents);
void make_material_parse_brush();
char *make_material_blend_mode(node_shader_t *kong, i32 blending, char *cola, char *colb, char *opac);
f32 make_material_get_displace_strength();
void ui_viewnodes_init();
void ui_viewnodes_on_node_remove(ui_node_t *n);
ui_canvas_control_t *ui_nodes_get_canvas_control(bool controls_down, bool is_node_view);
ui_node_canvas_t *ui_nodes_get_canvas(bool groups);
ui_nodes_t *ui_nodes_get_nodes();
void ui_nodes_update(void *_);
void ui_nodes_canvas_changed();
gpu_texture_t *ui_nodes_draw_grid(f32 zoom);
void ui_nodes_render(void *_);
gpu_texture_t *ui_nodes_get_node_preview_image(ui_node_t *n);
void ui_nodes_accept_asset_drop(i32 index);
void ui_nodes_accept_layer_drop(i32 index);
void ui_nodes_accept_material_drop(i32 index);
void ui_nodes_accept_swatch_drop(swatch_color_t *swatch);
ui_node_t *ui_nodes_make_node(ui_node_t *n, ui_nodes_t *nodes, ui_node_canvas_t *canvas);
bool ui_nodes_has_group(ui_node_canvas_t *c);
void ui_nodes_traverse_group(ui_node_canvas_t_array_t *mgroups, ui_node_canvas_t *c);
void import_theme_run(char *path);
ui_node_socket_t_array_t *util_clone_canvas_sockets(ui_node_socket_t_array_t *sockets);
ui_node_t *util_clone_canvas_node(ui_node_t *n);
ui_node_canvas_t *util_clone_canvas(ui_node_canvas_t *c);
material_data_t *util_clone_material_data(material_data_t *m);
obj_t *util_clone_obj(obj_t *o);
swatch_color_t *util_clone_swatch_color(swatch_color_t *s);
void import_keymap_run(char *path);
void tab_plugins_draw(ui_handle_t *htab);
void plugin_uv_unwrap_button();
void plugin_uv_unwrap_per_object_button(mesh_object_t *mo);
void make_discard_color_id(node_shader_t *kong, char *tex_coord);
void make_discard_face(node_shader_t *kong);
void make_discard_uv_island(node_shader_t *kong);
void make_discard_material_id(node_shader_t *kong);
bool import_arm_is_old(buffer_t *b);
project_t *import_arm_from_old(buffer_t *b);
void nodes_brush_init();
void nodes_brush_list_init();
ui_node_t *nodes_brush_create_node(char *node_type);
void import_obj_run(char *path, bool replace_existing);
void import_folder_run(char *path);
void export_obj_run(char *path, mesh_object_t_array_t *paint_objects, bool apply_disp);
void export_obj_run_fast(char *path, mesh_object_t_array_t *paint_objects);
void export_obj_sculpt_run(char *path, mesh_object_t_array_t *paint_objects);
void make_blur_run(node_shader_t *kong);
void import_font_run(char *path);
buffer_t *export_exr_run(i32 width, i32 height, buffer_t *src, i32 bits, i32 type, i32 off);
void nodes_material_init();
ui_node_t *nodes_material_create_node(char *node_type, node_group_t *group);
raw_mesh_t *geom_make_plane(f32 size_x, f32 size_y, i32 verts_x, i32 verts_y, f32 uv_scale);
raw_mesh_t *geom_make_uv_sphere(f32 radius, i32 width_segments, i32 height_segments, bool stretch_uv, f32 uv_scale);
node_shader_context_t *make_mesh_run(material_t *data, i32 layer_pass);
node_shader_context_t *make_depth_run(material_t *data, material_context_t *matcon);
void ui_sidebar_render_ui();
void ui_sidebar_show(bool b);
void console_toast(char *s);
void console_info(char *s);
void console_error(char *s);
void console_log(char *s);
void export_mesh_run(char *path, mesh_object_t_array_t *paint_objects, bool apply_disp, bool merge_vertices);
void export_player_run(char *path);
void camera_init();
void camera_update(void *_);
f32 camera_distance();
void camera_reset(i32 view_index);
bool box_preferences_model_exists(char *file_name);
char *box_preferences_file_name_from_url(char *url);
char *box_preferneces_model_url_from_name(char *name);
void box_preferences_lut_picked(char *path);
void box_preferences_show();
void box_preferences_fetch_themes();
void box_preferences_fetch_keymaps();
void box_preferences_fetch_plugins();
i32 box_preferences_get_theme_index();
i32 box_preferences_get_preset_index();
void render_path_paint_init();
void render_path_paint_commands_paint(bool dilation);
void render_path_paint_use_live_layer(bool use);
void render_path_paint_commands_cursor();
bool render_path_paint_paint_enabled();
void render_path_paint_live_brush_dirty();
void render_path_paint_begin();
void render_path_paint_end();
bool render_path_paint_is_rt_bake();
void render_path_paint_draw();
void render_path_paint_set_plane_mesh();
void render_path_paint_restore_plane_mesh();
void render_path_paint_bind_layers();
void render_path_paint_unbind_layers();
void render_path_paint_dilate(bool base, bool nor_pack);
void export_texture_run(char *path, bool bake_material);
void ui_box_render();
void ui_box_show_message(char *title, char *text, bool copyable);
void ui_box_show_custom(void (*commands)(void), i32 mw, i32 mh, void (*on_hide)(void), bool draggable, char *title);
void ui_box_hide();
void tab_meshes_draw(ui_handle_t *htab);
void tab_meshes_reset_preview_map();
void util_particle_init_physics();
void tab_layers_apply_filter(i32 filter);
void tab_layers_draw(ui_handle_t *htab);
void tab_layers_remap_layer_pointers(ui_node_t_array_t *nodes, i32_imap_t *pointer_map);
i32_map_t *tab_layers_init_layer_map();
i32_imap_t *tab_layers_fill_layer_map(i32_map_t *map);
void tab_layers_make_mask_preview_rgba32(slot_layer_t *l);
bool tab_layers_can_drop_new_layer(i32 position);
void util_uv_cache_uv_map();
void util_uv_cache_triangle_map();
void util_uv_cache_dilate_map();
void util_uv_cache_uv_island_map();
void util_texture_capture_output(gpu_texture_t *img, char *basename);
void render_path_raytrace_init();
void render_path_raytrace_raytrace_init(char *shader_name, bool build);
void render_path_raytrace_draw(bool use_live_layer);
node_shader_context_t *sculpt_make_sculpt_run(material_t *data, material_context_t *matcon);
void sculpt_make_mesh_run(node_shader_t *kong, slot_layer_t_array_t *sculpt_layers, i32_array_t *sculpt_indices);
void sculpt_import_mesh_pack_to_texture(mesh_data_t *mesh, gpu_texture_t *target);
void sculpt_init_sculpt_texture(slot_layer_t *l, mesh_data_t *md);
void sculpt_init();
void sculpt_layers_create_sculpt_layer();
void render_path_sculpt_commands();
void render_path_sculpt_begin();
void ui_statusbar_init();
void ui_statusbar_render_ui();
void ui_statusbar_draw_version_tab(ui_handle_t *htab);
void import_envmap_run(char *path, gpu_texture_t *image);
void image_texture_node_init();
char *parser_material_texture_store(ui_node_t *node, bind_tex_t *tex, char *tex_name, i32 color_space);
void material_node_init();
void uv_map_node_init();
void wave_texture_node_init();
void clamp_node_init();
void curvature_bake_node_init();
void blur_node_init();
void text_texture_node_init();
void gradient_texture_node_init();
void object_info_node_init();
void magic_texture_node_init();
void warp_node_init();
void normal_node_init();
void mapping_node_init();
void normal_map_node_init();
void invert_color_node_init();
void wireframe_node_init();
void gamma_node_init();
void vector_math2_node_init();
void vector_rotate_node_init();
void vector_transform_node_init();
void checker_texture_node_init();
void hue_saturation_value_node_init();
void separate_color_node_init();
void separate_xyz_node_init();
void math2_node_init();
void geometry_node_init();
void mix_color_node_init();
void quantize_node_init();
void layer_node_init();
void float_curve_node_init();
void map_range_node_init();
void voronoi_texture_node_init();
void color_ramp_node_init();
void nodes_material_color_ramp_button(i32 node_id);
void picker_node_init();
void replace_color_node_init();
void bump_node_init();
void gabor_texture_node_init();
void mix_normal_map_node_init();
void script_node_init();
void script_node_button(i32 node_id);
void combine_color_node_init();
void combine_xyz_node_init();
void noise_texture_node_init();
void brightness_contrast_node_init();
void color_mask_node_init();
void rgb_curves_node_init();
void vector_curves_node_init();
f32 vector_curves_eval_cpu(f32 *points, i32 num, f32 t);
char *vector_curves_eval(char *name, char *fac, f32 *points, i32 num);
void nodes_material_vector_curves_button(i32 node_id);
void layer_mask_node_init();
void camera_texture_node_init();
void value_node_init();
void texture_coordinate_node_init();
void group_node_init();
void nodes_material_new_group_button(i32 node_id);
void nodes_material_group_input_button(i32 node_id);
void nodes_material_group_output_button(i32 node_id);
void nodes_material_sync_sockets(ui_node_t *node);
i32 nodes_material_get_socket_color(char *type);
ui_node_socket_t *nodes_material_create_socket(ui_nodes_t *nodes, ui_node_t *node, char *name, char *type, ui_node_canvas_t *canvas, f32 min, f32 max,
void *default_value);
void brick_texture_node_init();
void rgb_node_init();
void rgb_to_bw_node_init();
void attribute_node_init();
void shader_node_init();
void save_image_node_init();
void save_image_node_run(ui_node_t *node, gpu_texture_t *result);
void repeat_node_init();
void neural_node_load_result(ui_node_t *node);
void text_to_image_node_run(ui_node_t *node, void (*callback)(ui_node_t *));
void upscale_image_node_init();
void image_to_pbr_node_init();
void inpaint_image_node_init();
void text_to_image_node_init();
void texture_mesh_node_init();
void text_to_text_node_clear();
void text_to_text_node_run(char *prompt, void (*done)(char *));
void outpaint_image_node_init();
char *neural_node_vector(ui_node_t *node, ui_node_socket_t *socket);
char *neural_node_value(ui_node_t *node, ui_node_socket_t *socket);
ui_node_t *neural_from_node(ui_node_socket_t *inp, i32 socket);
bool neural_node_button(ui_node_t *node, char *model);
void neural_node_check_result(ui_node_t *node);
char *neural_node_sd_bin();
char *neural_node_dir();
void neural_node_download_models(string_array_t *models);
void neural_node_models_init();
void edit_image_node_init();
void tile_image_node_init();
void image_to_3d_mesh_node_init();
void image_to_3d_mesh_node_button(i32 node_id);
void vary_image_node_init();
void image_to_normal_map_node_init();
void image_to_depth_node_init();
tex_image_node_t *tex_image_node_create(ui_node_t *raw, f32_array_t *args);
random_node_t *random_node_create(ui_node_t *raw, f32_array_t *args);
boolean_node_t *boolean_node_create(ui_node_t *raw, f32_array_t *args);
input_node_t *input_node_create(ui_node_t *raw, f32_array_t *args);
math_node_t *math_node_create(ui_node_t *raw, f32_array_t *args);
vector_node_t *vector_node_create(ui_node_t *raw, f32_array_t *args);
color_node_t *color_node_create(ui_node_t *raw, f32_array_t *args);
string_node_t *string_node_create(ui_node_t *raw, f32_array_t *args);
null_node_t *null_node_create(ui_node_t *raw, f32_array_t *args);
time_node_t *time_node_create(ui_node_t *raw, f32_array_t *args);
vector_math_node_t *vector_math_node_create(ui_node_t *raw, f32_array_t *args);
float_node_t *float_node_create(ui_node_t *raw, f32_array_t *args);
integer_node_t *integer_node_create(ui_node_t *raw, f32_array_t *args);
separate_vector_node_t *separate_vector_node_create(ui_node_t *raw, f32_array_t *args);
brush_output_node_t *brush_output_node_create(ui_node_t *raw, f32_array_t *args);
void edit_uvmap_update();