diff --git a/paint/assets/api.h b/paint/assets/api.h deleted file mode 100644 index 1da067e2..00000000 --- a/paint/assets/api.h +++ /dev/null @@ -1,1008 +0,0 @@ - -// Begin API - -#pragma once -#include -#include - -typedef int32_t i32; -typedef uint32_t u32; -typedef int16_t i16; -typedef uint16_t u16; -typedef int8_t i8; -typedef uint8_t u8; -typedef float f32; - -// Opaque types -typedef struct gpu_texture gpu_texture_t; -typedef struct raw_mesh raw_mesh_t; - -// Forward declarations for circular refs -typedef struct object object_t; -typedef struct transform transform_t; - -// --- Array types --- -typedef struct { - i8 *buffer; - int length; - int capacity; -} i8_array_t; -typedef struct { - u8 *buffer; - int length; - int capacity; -} u8_array_t; -typedef struct { - i16 *buffer; - int length; - int capacity; -} i16_array_t; -typedef struct { - u16 *buffer; - int length; - int capacity; -} u16_array_t; -typedef struct { - i32 *buffer; - int length; - int capacity; -} i32_array_t; -typedef struct { - u32 *buffer; - int length; - int capacity; -} u32_array_t; -typedef struct { - f32 *buffer; - int length; - int capacity; -} f32_array_t; -typedef struct { - void **buffer; - int length; - int capacity; -} any_array_t; -typedef struct { - char **buffer; - int length; - int capacity; -} string_array_t; -typedef struct { - u8 *buffer; - int length; - int capacity; -} buffer_t; - -typedef any_array_t obj_t_array_t; -typedef any_array_t vertex_array_t_array_t; -typedef any_array_t frustum_plane_array_t; -typedef any_array_t bind_const_t_array_t; -typedef any_array_t bind_tex_t_array_t; -typedef any_array_t material_context_t_array_t; -typedef any_array_t shader_const_t_array_t; -typedef any_array_t tex_unit_t_array_t; -typedef any_array_t vertex_element_t_array_t; - -// --- Math types --- -typedef struct { - float x, y; -} vec2_t; -typedef struct { - float x, y, z; -} vec3_t; -typedef struct { - float x, y, z, w; -} vec4_t; -typedef struct { - float x, y, z, w; -} quat_t; -typedef struct { - float m00, m01, m02, m10, m11, m12, m20, m21, m22; -} mat3_t; -typedef struct { - float m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33; -} mat4_t; - -// --- Enums --- -typedef enum { - UI_LAYOUT_VERTICAL, - UI_LAYOUT_HORIZONTAL -} ui_layout_t; -typedef enum { - UI_ALIGN_LEFT, - UI_ALIGN_CENTER, - UI_ALIGN_RIGHT -} ui_align_t; -typedef enum { - UI_STATE_IDLE, - UI_STATE_STARTED, - UI_STATE_DOWN, - UI_STATE_RELEASED, - UI_STATE_HOVERED -} ui_state_t; -typedef enum { - GPU_TEXTURE_FORMAT_RGBA32, - GPU_TEXTURE_FORMAT_RGBA64, - GPU_TEXTURE_FORMAT_RGBA128, - GPU_TEXTURE_FORMAT_R8, - GPU_TEXTURE_FORMAT_R16, - GPU_TEXTURE_FORMAT_R32, - GPU_TEXTURE_FORMAT_D32, - GPU_TEXTURE_FORMAT_RGBA32_BC7, -} gpu_texture_format_t; - -// --- UI structs --- -typedef struct { - int i; - float f; - int b; - int layout; - float scroll_offset; - int color; - int redraws; - char *text; - int scroll_enabled; - int drag_enabled; - int changed; - int init; - any_array_t children; -} ui_handle_t; - -typedef struct { - int id; - int node_id; - char *name; - char *type; - int color; - f32_array_t default_value; - float min; - float max; - float precision; - int display; -} ui_node_socket_t; - -typedef struct { - char *name; - char *type; - int output; - f32_array_t default_value; - u8_array_t data; - float min; - float max; - float precision; - float height; -} ui_node_button_t; - -typedef struct { - int id; - int from_id; - int from_socket; - int to_id; - int to_socket; -} ui_node_link_t; - -typedef struct { - int id; - char *name; - char *type; - float x; - float y; - int color; - any_array_t inputs; - any_array_t outputs; - any_array_t buttons; - float width; - int flags; -} ui_node_t; - -// --- Engine data structs --- -typedef struct { - char *name; - char *type; - char *data_ref; - f32_array_t transform; - f32_array_t dimensions; - int visible; - int spawn; - void *anim; - char *material_ref; - obj_t_array_t children; - void *_; -} obj_t; - -typedef struct { - char *attrib; - char *data; - i16_array_t values; -} vertex_array_t; - -typedef struct { - char *name; - float scale_pos; - float scale_tex; - vertex_array_t_array_t vertex_arrays; - u32_array_t index_array; - void *_; -} mesh_data_t; - -typedef struct { - char *name; - float near_plane; - float far_plane; - float fov; - float aspect; - int frustum_culling; - f32_array_t ortho; -} camera_data_t; - -typedef struct { - char *name; - int color; - float strength; - char *irradiance; - char *radiance; - int radiance_mipmaps; - char *envmap; - void *_; -} world_data_t; - -typedef struct { - char *name; - char *data; -} vertex_element_t; - -typedef struct { - char *name; - char *type; - char *link; -} shader_const_t; - -typedef struct { - char *name; - char *link; -} tex_unit_t; - -typedef struct { - char *name; - int depth_write; - char *compare_mode; - char *cull_mode; - char *vertex_shader; - char *fragment_shader; - int shader_from_source; - char *blend_source; - char *blend_destination; - char *alpha_blend_source; - char *alpha_blend_destination; - string_array_t color_attachments; - char *depth_attachment; - vertex_element_t_array_t vertex_elements; - shader_const_t_array_t constants; - tex_unit_t_array_t texture_units; -} shader_context_t; - -typedef struct { - char *name; - any_array_t contexts; -} shader_data_t; - -typedef struct { - char *name; - f32_array_t vec; -} bind_const_t; - -typedef struct { - char *name; - char *file; -} bind_tex_t; - -typedef struct { - char *name; - bind_const_t_array_t bind_constants; - bind_tex_t_array_t bind_textures; - void *_; -} material_context_t; - -typedef struct { - char *name; - char *shader; - material_context_t_array_t contexts; - void *_; -} material_data_t; - -typedef struct { - char *name; - int width; - int height; - char *format; - float scale; - gpu_texture_t *_image; -} render_target_t; - -// --- Scene object structs --- -struct transform { - vec4_t loc; - float scale_world; - int dirty; - object_t *object; - float radius; -}; - -struct object { - int uid; - float urandom; - obj_t raw; - char *name; - transform_t transform; - object_t *parent; - any_array_t children; - int visible; - int culled; - int is_empty; - void *ext; - char *ext_type; -}; - -typedef struct { - object_t base; - mesh_data_t data; - material_data_t material; - float camera_dist; - int frustum_culling; - char *skip_context; - char *force_context; -} mesh_object_t; - -typedef struct { - object_t base; - camera_data_t data; - int frame; - frustum_plane_array_t frustum_planes; -} camera_object_t; - -// --- Paint structs --- -typedef struct { - int window_w; - int window_h; - float window_scale; - float rp_supersample; - string_array_t recent_projects; - string_array_t plugins; - char *keymap; - char *theme; - int undo_steps; - float camera_fov; - int layer_res; - int brush_live; - int node_previews; - int material_live; - int workspace; - int workflow; -} config_t; - -typedef struct { - mesh_object_t paint_object; - int ddirty; - int pdirty; - int rdirty; - void *material; - void *layer; - void *brush; - int tool; - float brush_radius; - float brush_opacity; - float brush_hardness; - float brush_scale; - float brush_angle; - int brush_blending; - int viewport_mode; - int xray; - bool capturing_screenshot; -} context_t; - -typedef struct { - char *version; - string_array_t assets; - int is_bgra; - char *envmap; - float envmap_strength; - float envmap_angle; - float camera_fov; - f32_array_t camera_world; - f32_array_t camera_origin; - void *swatches; - void *brush_nodes; - void *material_nodes; - string_array_t font_assets; - void *layer_datas; - void *mesh_datas; - string_array_t script_datas; -} project_t; - -// --- Math --- -float vec2_len(vec2_t *v); -vec2_t *vec2_set_len(vec2_t *v, float len); -vec2_t *vec2_mult(vec2_t *v, float f); -vec2_t *vec2_add(vec2_t *a, vec2_t *b); -vec2_t *vec2_sub(vec2_t *a, vec2_t *b); -float vec2_cross(vec2_t *a, vec2_t *b); -vec2_t *vec2_norm(vec2_t *v); -float vec2_dot(vec2_t *a, vec2_t *b); -vec2_t *vec2_nan(void); -int vec2_isnan(vec2_t *v); -vec4_t *vec4_cross(vec4_t *a, vec4_t *b); -vec4_t *vec4_add(vec4_t *a, vec4_t *b); -vec4_t *vec4_fadd(vec4_t *v, float x, float y, float z, float w); -vec4_t *vec4_norm(vec4_t *v); -vec4_t *vec4_mult(vec4_t *v, float f); -float vec4_dot(vec4_t *a, vec4_t *b); -vec4_t *vec4_apply_proj(vec4_t *v, mat4_t *m); -vec4_t *vec4_apply_mat4(vec4_t *v, mat4_t *m); -vec4_t *vec4_apply_axis_angle(vec4_t *v, vec4_t *axis, float angle); -vec4_t *vec4_apply_quat(vec4_t *v, quat_t *q); -int vec4_equals(vec4_t *a, vec4_t *b); -int vec4_almost_equals(vec4_t *a, vec4_t *b, float eps); -float vec4_len(vec4_t *v); -vec4_t *vec4_sub(vec4_t *a, vec4_t *b); -float vec4_dist(vec4_t *a, vec4_t *b); -vec4_t *vec4_reflect(vec4_t *v, vec4_t *n); -vec4_t *vec4_clamp(vec4_t *v, float min, float max); -vec4_t *vec4_x_axis(void); -vec4_t *vec4_y_axis(void); -vec4_t *vec4_z_axis(void); -vec4_t *vec4_nan(void); -int vec4_isnan(vec4_t *v); -quat_t *quat_from_axis_angle(vec4_t *axis, float angle); -quat_t *quat_from_mat(mat4_t *m); -quat_t *quat_from_rot_mat(mat4_t *m); -quat_t *quat_mult(quat_t *a, quat_t *b); -quat_t *quat_norm(quat_t *q); -vec4_t *quat_get_euler(quat_t *q); -quat_t *quat_from_euler(float x, float y, float z); -float quat_dot(quat_t *a, quat_t *b); -quat_t *quat_from_to(vec4_t *from, vec4_t *to); -quat_t *quat_inv(quat_t *q); -mat3_t *mat3_identity(void); -mat3_t *mat3_translation(float x, float y); -mat3_t *mat3_rotation(float angle); -mat3_t *mat3_scale(mat3_t *m, vec4_t *s); -mat3_t *mat3_set_from4(mat4_t *m); -mat3_t *mat3_multmat(mat3_t *a, mat3_t *b); -mat3_t *mat3_transpose(mat3_t *m); -mat3_t *mat3_nan(void); -int mat3_isnan(mat3_t *m); -mat4_t *mat4_identity(void); -mat4_t *mat4_persp(float fov, float aspect, float near, float far); -mat4_t *mat4_ortho(float left, float right, float bottom, float top, float near, float far); -mat4_t *mat4_rot_z(float angle); -mat4_t *mat4_compose(vec4_t *loc, quat_t *rot, vec4_t *scale); -mat4_t *mat4_set_loc(mat4_t *m, vec4_t *loc); -mat4_t *mat4_from_quat(quat_t *q); -mat4_t *mat4_translate(mat4_t *m, float x, float y, float z); -mat4_t *mat4_scale(mat4_t *m, vec4_t *s); -mat4_t *mat4_mult_mat3x4(mat4_t *a, mat4_t *b); -mat4_t *mat4_mult_mat(mat4_t *a, mat4_t *b); -mat4_t *mat4_inv(mat4_t *m); -mat4_t *mat4_transpose(mat4_t *m); -mat4_t *mat4_transpose3(mat4_t *m); -vec4_t *mat4_get_loc(mat4_t *m); -vec4_t *mat4_get_scale(mat4_t *m); -mat4_t *mat4_mult(mat4_t *m, float f); -mat4_t *mat4_to_rot(mat4_t *m); -vec4_t *mat4_right(mat4_t *m); -vec4_t *mat4_look(mat4_t *m); -vec4_t *mat4_up(mat4_t *m); -void *mat4_to_f32_array(mat4_t *m); -float mat4_determinant(mat4_t *m); -mat4_t *mat4_nan(void); -int mat4_isnan(mat4_t *m); -void transform_set_matrix(transform_t *t, mat4_t *m); -void transform_rotate(transform_t *t, vec4_t *axis, float angle); -void transform_move(transform_t *t, vec4_t *dir, float dist); -vec4_t *transform_look(transform_t *t); -vec4_t *transform_right(transform_t *t); -vec4_t *transform_up(transform_t *t); -vec4_t *raycast_aabb(object_t *obj); -void line_draw_render(mat4_t *m); -void line_draw_bounds(mat4_t *m, vec4_t *bounds); -void shape_draw_sphere(mat4_t *m); -void draw_set_transform(mat3_t *m); -int iron_random_get(void); -int iron_random_get_max(int max); -int iron_random_get_in(int min, int max); -float vec4_fdist(float x0, float y0, float z0, float x1, float y1, float z1); -float mat4_cofactor(float a0, float a1, float a2, float b0, float b1, float b2, float c0, float c1, float c2); -float cosf(float x); -float sinf(float x); - -// --- Object --- -object_t *object_create(int is_empty); -void object_set_parent(object_t *obj, object_t *parent); -void object_remove(object_t *obj); -object_t *object_get_child(object_t *obj, char *name); - -// --- Transform --- -transform_t *transform_create(object_t *obj); -void transform_reset(transform_t *t); -void transform_update(transform_t *t); -void transform_build_matrix(transform_t *t); -void transform_decompose(transform_t *t); -float transform_world_x(transform_t *t); -float transform_world_y(transform_t *t); -float transform_world_z(transform_t *t); - -// --- Camera object --- -camera_object_t *camera_object_create(camera_data_t *data); -void camera_object_build_proj(camera_object_t *cam, float aspect); -void camera_object_remove(camera_object_t *cam); -void camera_object_build_mat(camera_object_t *cam); - -// --- World data --- -world_data_t *world_data_parse(void *raw, char *name); -void world_data_load_envmap(world_data_t *data); - -// --- Material data --- -material_data_t *material_data_create(void *raw, char *name); -material_data_t *material_data_parse(void *raw, char *name); -material_context_t *material_data_get_context(material_data_t *data, char *name); -void material_context_load(material_context_t *ctx); - -// --- Shader data --- -shader_data_t *shader_data_create(void *raw); -shader_data_t *shader_data_parse(void *raw, char *name); -void shader_data_delete(shader_data_t *data); -shader_context_t *shader_data_get_context(shader_data_t *data, char *name); -void shader_context_load(shader_context_t *ctx); -void shader_context_compile(shader_context_t *ctx); -void shader_context_finish_compile(shader_context_t *ctx); -void shader_context_delete(shader_context_t *ctx); -void shader_context_add_const(shader_context_t *ctx, int i); -void shader_context_add_tex(shader_context_t *ctx, int i); - -// --- Mesh data --- -mesh_data_t *mesh_data_parse(void *raw, char *name); -mesh_data_t *mesh_data_create(void *raw); -int mesh_data_get_vertex_size(mesh_data_t *data); -void mesh_data_build_vertices(mesh_data_t *data, void *buf); -void mesh_data_build_indices(mesh_data_t *data, void *buf); -vertex_array_t *mesh_data_get_vertex_array(mesh_data_t *data, char *attrib); -void mesh_data_build(mesh_data_t *data); -void mesh_data_delete(mesh_data_t *data); - -// --- Mesh object --- -mesh_object_t *mesh_object_create(mesh_data_t *data, material_data_t *mat); -void mesh_object_set_data(mesh_object_t *obj, mesh_data_t *data); -void mesh_object_remove(mesh_object_t *obj); -void mesh_object_render(mesh_object_t *obj, material_data_t *mat, void *ctx); - -// --- Data --- -mesh_data_t *data_get_mesh(void *pack, char *name); -camera_data_t *data_get_camera(void *pack, char *name); -material_data_t *data_get_material(void *pack, char *name); -world_data_t *data_get_world(void *pack, char *name); -shader_data_t *data_get_shader(void *pack, char *name); -void *data_get_scene_raw(char *name); -gpu_texture_t *data_get_image(char *name); -buffer_t *data_get_blob(char *name); -void *data_get_video(char *name); -void *data_get_font(char *name); -void data_delete_mesh(char *name); -void data_delete_blob(char *name); -void data_delete_image(char *name); -void data_delete_video(char *name); -void data_delete_font(char *name); -bool data_is_abs(char *path); -char *data_path(void); - -// --- Scene --- -void *scene_create(char *name); -void scene_remove(void); -void *scene_set_active(void *scene); -object_t *scene_add_object(char *name); -object_t *scene_get_child(char *name); -mesh_object_t *scene_add_mesh_object(char *mesh, char *mat, char *name); -camera_object_t *scene_add_camera_object(char *data, char *name); -void *scene_add_scene(char *name, object_t *parent); -object_t *scene_spawn_object(void *scene, object_t *parent, int anim); -object_t *scene_get_raw_object_by_name(void *scene, char *name); -object_t *scene_create_object(void *scene, char *name, object_t *parent); -mesh_object_t *scene_create_mesh_object(void *pack, char *name, mesh_data_t *data, material_data_t *mat); -void scene_gen_transform(object_t *obj, void *scene); - -// --- Render path --- -void render_path_set_target(char *name, void *additional_targets, void *clear_color, int flags, int color_bits, float depth_bits); -void render_path_end(void); -void render_path_draw_meshes(char *context); -void render_path_draw_skydome(char *name); -void render_path_bind_target(char *name, char *uniform); -void render_path_draw_shader(char *name); -void render_path_load_shader(char *name); -void render_path_resize(void); -render_target_t *render_path_create_render_target(render_target_t *rt); -render_target_t *render_target_create(void); - -// --- UI --- -void ui_begin(void *g); -void ui_begin_sticky(void); -void ui_end_sticky(void); -void ui_begin_region(void *g, int x, int y, int w); -void ui_end_region(void); -bool ui_window(ui_handle_t *handle, int x, int y, int w, int h, int drag); -bool ui_button(char *text, int align, char *icon); -int ui_text(char *text, int align, int bg); -bool ui_tab(ui_handle_t *handle, char *text, int vertical, int color, int notab); -bool ui_panel(ui_handle_t *handle, char *text, int type, int filled, int pack); -int ui_sub_image(gpu_texture_t *img, int color, int sx, int sy, int sw, int sh, int h); -int ui_image(gpu_texture_t *img, int color, int h); -char *ui_text_input(ui_handle_t *handle, char *label, int align, int multiline, int password); -bool ui_check(ui_handle_t *handle, char *text, char *label); -bool ui_radio(ui_handle_t *handle, int index, char *text, char *label); -int ui_combo(ui_handle_t *handle, void *texts, char *label, int init_max, int search_bar, int label_align); -float ui_slider(ui_handle_t *handle, char *text, float from, float to, int filled, float precision, int display_value, int align, int no_bg); -void ui_row(f32_array_t *splits); -void ui_row2(void); -void ui_row3(void); -void ui_row4(void); -void ui_row5(void); -void ui_row6(void); -void ui_row7(void); -void ui_separator(int h, int color); -void ui_tooltip(char *text); -void ui_tooltip_image(gpu_texture_t *img, int max_size); -void ui_end(void); -void ui_end_window(void); -void ui_mouse_down(void *g, int button, int x, int y); -void ui_mouse_move(void *g, int x, int y, int mx, int my); -void ui_mouse_up(void *g, int button, int x, int y); -void ui_mouse_wheel(void *g, float delta); -void ui_key_down(void *g, int key); -void ui_key_up(void *g, int key); -void ui_key_press(void *g, int key); -ui_handle_t *ui_handle_create(void); -ui_handle_t *ui_nest(ui_handle_t *handle, int i); -void ui_set_scale(float scale); -bool ui_get_hover(float h); -bool ui_get_released(float h); -bool ui_input_in_rect(float x, float y, float w, float h); -void ui_fill(float x, float y, float w, float h, int color); -void ui_rect(float x, float y, float w, float h, int color, float strength); -bool ui_is_visible(float h); -void ui_end_element(void); -void ui_end_element_of_size(float h); -void ui_fade_color(float amount); -void ui_draw_string(char *text, float x, float y, int align, int truncate); -void ui_draw_shadow(float x, float y, float w, float h); -void ui_draw_rect(int fill, int shadows, float x, float y, float w, float h); -void ui_start_text_edit(ui_handle_t *handle, int align); -float UI_SCALE(void); -float UI_ELEMENT_W(void); -float UI_ELEMENT_H(void); -float UI_ELEMENT_OFFSET(void); -float UI_ARROW_SIZE(void); -float UI_BUTTON_H(void); -float UI_CHECK_SIZE(void); -float UI_CHECK_SELECT_SIZE(void); -float UI_FONT_SIZE(void); -float UI_SCROLL_W(void); -float UI_TEXT_OFFSET(void); -float UI_TAB_W(void); -float UI_HEADER_DRAG_H(void); -float UI_TOOLTIP_DELAY(void); -float ui_float_input(ui_handle_t *handle, char *text, int align, float precision); -int ui_inline_radio(ui_handle_t *handle, void *texts, int align); -int ui_color_wheel(ui_handle_t *handle, int alpha, float w, float h, int button, char *picker, char *label); -char *ui_text_area(ui_handle_t *handle, int align, int editable, char *label, int word_wrap); -void ui_begin_menu(void); -void ui_end_menu(void); -bool ui_menubar_button(char *text); -int ui_color_r(int color); -int ui_color_g(int color); -int ui_color_b(int color); -int ui_color_a(int color); -int ui_color(int r, int g, int b, int a); - -// --- UI nodes --- -void ui_nodes_init(void *canvas); -void ui_node_canvas(void *g, void *canvas); -void ui_nodes_rgba_popup(ui_handle_t *handle, ui_node_socket_t *socket, int x, int y); -void ui_remove_node(ui_node_t *node, void *canvas); -float UI_NODES_SCALE(void); -float UI_NODES_PAN_X(void); -float UI_NODES_PAN_Y(void); -float UI_NODE_X(ui_node_t *node); -float UI_NODE_Y(ui_node_t *node); -float UI_NODE_W(ui_node_t *node); -float UI_NODE_H(ui_node_t *node, void *canvas); -float UI_OUTPUT_Y(ui_node_t *node, int i); -float UI_INPUT_Y(ui_node_t *node, void *canvas, int i); -float UI_OUTPUTS_H(ui_node_t *node, int i); -float UI_BUTTONS_H(ui_node_t *node); -float UI_LINE_H(void); -int ui_get_socket_id(void *canvas); -ui_node_link_t *ui_get_link(void *canvas, int i); -int ui_next_link_id(void *canvas); -ui_node_t *ui_get_node(void *canvas, int i); -int ui_next_node_id(void *canvas); - -// --- System --- -float sys_time(void); -float sys_delta(void); -float sys_real_delta(void); -int sys_w(void); -int sys_h(void); -int sys_x(void); -int sys_y(void); -char *sys_title(void); -void sys_title_set(char *title); -void *sys_get_shader(char *name); -char *sys_buffer_to_string(buffer_t *buf); -buffer_t *sys_string_to_buffer(char *s); - -// --- Shape --- -void line_draw_init(void); -void line_draw_lineb(int x0, int y0, int z0, int x1, int y1, int z1); -void line_draw_line(float x0, float y0, float z0, float x1, float y1, float z1); -void line_draw_begin(void); -void line_draw_end(void); - -// --- Draw --- -void draw_begin(gpu_texture_t *img, int clear, int color); -void draw_scaled_sub_image(gpu_texture_t *img, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh); -void draw_scaled_image(gpu_texture_t *img, float x, float y, float w, float h); -void draw_sub_image(gpu_texture_t *img, float x, float y, float sx, float sy, float sw, float sh); -void draw_image(gpu_texture_t *img, float x, float y); -void draw_filled_triangle(float x0, float y0, float x1, float y1, float x2, float y2); -void draw_filled_rect(float x, float y, float w, float h); -void draw_rect(float x, float y, float w, float h, float strength); -void draw_line(float x0, float y0, float x1, float y1, float strength); -void draw_line_aa(float x0, float y0, float x1, float y1, float strength); -void draw_string(char *text, float x, float y); -void draw_end(void); -void draw_flush(void); -void draw_set_color(int color); -int draw_get_color(void); -void draw_set_pipeline(void *pipeline); -bool draw_set_font(void *font, int size); -float draw_sub_string_width(void *font, int size, char *text, int start, int end); -int draw_string_width(void *font, int size, char *text); -void draw_filled_circle(float x, float y, float r, int segments); -void draw_circle(float x, float y, float r, int segments, float strength); -void draw_cubic_bezier(f32_array_t *x, f32_array_t *y, int segments, float strength); - -// --- String --- -char *string_alloc(int size); -char *string_copy(char *s); -int string_length(char *s); -bool string_equals(char *a, char *b); -char *i32_to_string(int i); -char *i32_to_string_hex(int i); -char *i64_to_string(int i); -char *u64_to_string(int i); -char *f32_to_string(float f); -char *f32_to_string_with_zeros(float f); -void string_strip_trailing_zeros(char *s); -int string_index_of(char *s, char *sub); -int string_index_of_pos(char *s, char *sub, int pos); -int string_last_index_of(char *s, char *sub); -string_array_t *string_split(char *s, char *sep); -char *string_array_join(string_array_t *arr, char *sep); -char *string_replace_all(char *s, char *from, char *to); -char *substring(char *s, int from, int to); -char *string_from_char_code(int code); -int char_code_at(char *s, int i); -char *char_at(char *s, int i); -bool starts_with(char *s, char *prefix); -bool ends_with(char *s, char *suffix); -char *trim_end(char *s); -int string_utf8_decode(char *s, void *out); - -// --- File --- -bool iron_file_reader_open(void *reader, char *path, int size); -bool iron_file_reader_close(void *reader); -int iron_file_reader_read(void *reader, void *buf, int size); -int iron_file_reader_size(void *reader); -int iron_file_reader_pos(void *reader); -bool iron_file_reader_seek(void *reader, int pos); -bool iron_file_writer_open(void *writer, char *path); -void iron_file_writer_write(void *writer, void *buf, int size); -void iron_file_writer_close(void *writer); -void *iron_read_directory(char *path); -void iron_create_directory(char *path); -bool iron_is_directory(char *path); -bool iron_file_exists(char *path); -void iron_delete_file(char *path); -void iron_file_save_bytes(char *path, void *buf, int size); -void iron_file_download(char *url, void *buf, int size, char *path); -void *file_read_directory(char *path); -void file_copy(char *from, char *to); -void file_start(char *path); -void file_download_to(char *url, char *path, void *cb, int size); - -// --- GC --- -void *gc_alloc(int size); -void gc_leaf(void *p); -void gc_root(void *p); -void gc_unroot(void *p); -void *gc_realloc(void *p, int size); -void gc_free(void *p); -void gc_pause(void); -void gc_resume(void); -void gc_run(void); -void gc_start(void *heap); -void gc_stop(void); - -// --- Map --- -void i32_map_set(void *map, char *key, int val); -void f32_map_set(void *map, char *key, float val); -void any_map_set(void *map, char *key, void *val); -int i32_map_get(void *map, char *key); -float f32_map_get(void *map, char *key); -void *any_map_get(void *map, char *key); -void map_delete(void *map, char *key); -string_array_t *map_keys(void *map); -void *i32_map_create(void); -void *any_map_create(void); -void i32_imap_set(void *map, int key, int val); -void any_imap_set(void *map, int key, void *val); -int i32_imap_get(void *map, int key); -void *any_imap_get(void *map, int key); -void imap_delete(void *map, int key); -i32_array_t *imap_keys(void *map); -void *any_imap_create(void); - -// --- Array --- -void array_free(void *arr); -void i8_array_push(i8_array_t *arr, int val); -void u8_array_push(u8_array_t *arr, int val); -void i16_array_push(i16_array_t *arr, int val); -void u16_array_push(u16_array_t *arr, int val); -void i32_array_push(i32_array_t *arr, int val); -void u32_array_push(u32_array_t *arr, int val); -void f32_array_push(f32_array_t *arr, float val); -void any_array_push(any_array_t *arr, void *val); -void string_array_push(string_array_t *arr, char *val); -void i8_array_resize(i8_array_t *arr, int size); -void u8_array_resize(u8_array_t *arr, int size); -void i16_array_resize(i16_array_t *arr, int size); -void u16_array_resize(u16_array_t *arr, int size); -void i32_array_resize(i32_array_t *arr, int size); -void u32_array_resize(u32_array_t *arr, int size); -void f32_array_resize(f32_array_t *arr, int size); -void any_array_resize(any_array_t *arr, int size); -void string_array_resize(string_array_t *arr, int size); -void buffer_resize(buffer_t *arr, int size); -void array_sort(void *arr, void *fn); -void i32_array_sort(i32_array_t *arr, void *fn); -void *array_pop(any_array_t *arr); -int i32_array_pop(i32_array_t *arr); -void *array_shift(any_array_t *arr); -void array_splice(any_array_t *arr, int start, int count); -void i32_array_splice(i32_array_t *arr, int start, int count); -any_array_t *array_concat(any_array_t *a, any_array_t *b); -any_array_t *array_slice(any_array_t *arr, int from, int to); -void array_insert(any_array_t *arr, int i, void *val); -void array_remove(any_array_t *arr, void *val); -void string_array_remove(string_array_t *arr, char *val); -void i32_array_remove(i32_array_t *arr, int val); -int array_index_of(any_array_t *arr, void *val); -int string_array_index_of(string_array_t *arr, char *val); -int i32_array_index_of(i32_array_t *arr, int val); -void array_reverse(any_array_t *arr); -buffer_t *buffer_slice(buffer_t *buf, int from, int to); -int buffer_get_u8(buffer_t *buf, int pos); -int buffer_get_i8(buffer_t *buf, int pos); -int buffer_get_u16(buffer_t *buf, int pos); -int buffer_get_i16(buffer_t *buf, int pos); -float buffer_get_f16(buffer_t *buf, int pos); -int buffer_get_u32(buffer_t *buf, int pos); -int buffer_get_i32(buffer_t *buf, int pos); -float buffer_get_f32(buffer_t *buf, int pos); -float buffer_get_f64(buffer_t *buf, int pos); -int buffer_get_i64(buffer_t *buf, int pos); -void buffer_set_u8(buffer_t *buf, int pos, int val); -void buffer_set_i8(buffer_t *buf, int pos, int val); -void buffer_set_u16(buffer_t *buf, int pos, int val); -void buffer_set_i16(buffer_t *buf, int pos, int val); -void buffer_set_u32(buffer_t *buf, int pos, int val); -void buffer_set_i32(buffer_t *buf, int pos, int val); -void buffer_set_f32(buffer_t *buf, int pos, float val); -buffer_t *buffer_create(int size); -buffer_t *buffer_create_from_raw(void *p, int size); -f32_array_t *f32_array_create(int size); -f32_array_t *f32_array_create_from_buffer(buffer_t *buf); -f32_array_t *f32_array_create_from_array(f32_array_t *arr); -f32_array_t *f32_array_create_from_raw(void *p, int size); -f32_array_t *f32_array_create_x(float x); -f32_array_t *f32_array_create_xy(float x, float y); -f32_array_t *f32_array_create_xyz(float x, float y, float z); -f32_array_t *f32_array_create_xyzw(float x, float y, float z, float w); -f32_array_t *f32_array_create_xyzwv(float x, float y, float z, float w, float v); -u32_array_t *u32_array_create(int size); -u32_array_t *u32_array_create_from_array(u32_array_t *arr); -u32_array_t *u32_array_create_from_raw(void *p, int size); -i32_array_t *i32_array_create(int size); -i32_array_t *i32_array_create_from_array(i32_array_t *arr); -i32_array_t *i32_array_create_from_raw(void *p, int size); -u16_array_t *u16_array_create(int size); -u16_array_t *u16_array_create_from_raw(void *p, int size); -i16_array_t *i16_array_create(int size); -i16_array_t *i16_array_create_from_array(i16_array_t *arr); -i16_array_t *i16_array_create_from_raw(void *p, int size); -u8_array_t *u8_array_create(int size); -u8_array_t *u8_array_create_from_array(u8_array_t *arr); -u8_array_t *u8_array_create_from_raw(void *p, int size); -u8_array_t *u8_array_create_from_string(char *s); -char *u8_array_to_string(u8_array_t *arr); -i8_array_t *i8_array_create(int size); -i8_array_t *i8_array_create_from_raw(void *p, int size); -any_array_t *any_array_create(int size); -any_array_t *any_array_create_from_raw(void *p, int size); -string_array_t *string_array_create(int size); - -// --- Input --- -bool mouse_down(char *button); -bool mouse_down_any(void); -bool mouse_started(char *button); -bool mouse_started_any(void); -bool mouse_released(char *button); -float mouse_view_x(void); -float mouse_view_y(void); -bool keyboard_down(char *key); -bool keyboard_started(char *key); -bool keyboard_started_any(void); -bool keyboard_released(char *key); -bool keyboard_repeat(char *key); -char *keyboard_key_code(int code); - -// --- Paint --- -void *plugin_create(void); -void plugin_notify_on_ui(void *plugin, void *fn); -void plugin_notify_on_update(void *plugin, void *fn); -void plugin_notify_on_delete(void *plugin, void *fn); -void script_notify_on_update(void *fn); -void script_notify_on_next_frame(void *fn); -void console_info(char *s); -void console_error(char *s); -void console_log(char *s); -void ui_box_show_message(char *title, char *text, bool copyable); -void ui_files_show2(char *filters, bool is_save, bool open_multiple, void *files_done); -void project_save(bool save_and_quit); -char *project_filepath_get(void); -void project_filepath_set(char *path); -context_t *script_get_context(void); -config_t *script_get_config(void); -project_t *script_get_project(void); -object_t *script_get_object(char *name); -void context_set_viewport_shader(void *viewport_shader); -void context_set_viewport_mode(int mode); -void context_set_camera_controls(int i); -void node_shader_write_frag(void *raw, char *s); -void plugin_register_texture(char *format, void *fn); -void plugin_unregister_texture(char *format); -void plugin_register_mesh(char *format, void *fn); -void plugin_unregister_mesh(char *format); -raw_mesh_t *plugin_make_raw_mesh(char *name, i16_array_t *posa, i16_array_t *nora, u32_array_t *inda, float scale_pos); -void plugin_material_category_add(char *category_name, any_array_t *node_list); -void plugin_brush_category_add(char *category_name, any_array_t *node_list); -void plugin_material_category_remove(char *category_name); -void plugin_brush_category_remove(char *category_name); -void plugin_material_custom_nodes_set(char *node_type, void *fn); -void plugin_brush_custom_nodes_set(char *node_type, void *fn); -void plugin_material_custom_nodes_remove(char *node_type); -void plugin_brush_custom_nodes_remove(char *node_type); -void *plugin_material_kong_get(void); -char *parser_material_parse_value_input(ui_node_socket_t *inp, bool vector_as_grayscale); -mesh_object_t *context_main_object(void); -void export_texture_run(char *path, bool bake_material); -void context_select_tool(int i); -gpu_texture_t *gpu_create_render_target(int width, int height, int format); -void viewport_capture_screenshot_to(gpu_texture_t *target, float x, float y, float w, float h); -void viewport_save_texture(gpu_texture_t *screenshot); -void project_reimport_mesh_skinned(int frame); -void iron_delay_idle_sleep(void); - -// --- Printf / string formatting --- -int printf(char *fmt, ...); -char *string(char *fmt, ...); - -// End API