From 0a096919e3bb8c979227c3f59a2366c9f883e6e5 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 2 Mar 2026 16:09:47 +0100 Subject: [PATCH] base: cleanup --- base/sources/engine.c | 0 base/sources/engine.h | 0 base/sources/engine.ts | 0 base/sources/ts/camera_object.ts | 9 --- base/sources/ts/data.ts | 70 +---------------------- base/sources/ts/mesh_data.ts | 3 - base/sources/ts/mesh_object.ts | 6 -- base/sources/ts/object.ts | 21 +------ base/sources/ts/render_path.ts | 96 +++----------------------------- base/sources/ts/scene.ts | 49 +--------------- base/sources/ts/transform.ts | 44 +-------------- paint/sources/slot_layer.ts | 2 +- 12 files changed, 16 insertions(+), 284 deletions(-) create mode 100644 base/sources/engine.c create mode 100644 base/sources/engine.h create mode 100644 base/sources/engine.ts diff --git a/base/sources/engine.c b/base/sources/engine.c new file mode 100644 index 00000000..e69de29b diff --git a/base/sources/engine.h b/base/sources/engine.h new file mode 100644 index 00000000..e69de29b diff --git a/base/sources/engine.ts b/base/sources/engine.ts new file mode 100644 index 00000000..e69de29b diff --git a/base/sources/ts/camera_object.ts b/base/sources/ts/camera_object.ts index 21872160..cf57b6cd 100644 --- a/base/sources/ts/camera_object.ts +++ b/base/sources/ts/camera_object.ts @@ -10,7 +10,6 @@ type camera_object_t = { frustum_planes?: frustum_plane_t[]; }; -let _camera_object_v: vec4_t = vec4_create(); let _camera_object_sphere_center: vec4_t = vec4_create(); let camera_object_taa_frames: i32 = 1; @@ -108,14 +107,6 @@ function camera_object_proj_jitter(raw: camera_object_t) { function camera_object_build_mat(raw: camera_object_t) { transform_build_matrix(raw.base.transform); - // Prevent camera matrix scaling - // TODO: discards position affected by scaled camera parent - let sc: vec4_t = mat4_get_scale(raw.base.transform.world); - if (sc.x != 1.0 || sc.y != 1.0 || sc.z != 1.0) { - _camera_object_v = vec4_create(1.0 / sc.x, 1.0 / sc.y, 1.0 / sc.z); - raw.base.transform.world = mat4_scale(raw.base.transform.world, _camera_object_v); - } - raw.v = mat4_inv(raw.base.transform.world); raw.vp = mat4_mult_mat(raw.v, raw.p); diff --git a/base/sources/ts/data.ts b/base/sources/ts/data.ts index b39dab6b..c039b41d 100644 --- a/base/sources/ts/data.ts +++ b/base/sources/ts/data.ts @@ -222,72 +222,11 @@ function data_delete_sound(handle: string) { } /// end -function data_delete_all() { - let cached_meshes_keys: string[] = map_keys(data_cached_meshes); - for (let i: i32 = 0; i < cached_meshes_keys.length; ++i) { - let c: mesh_data_t = map_get(data_cached_meshes, cached_meshes_keys[i]); - mesh_data_delete(c); - } - data_cached_meshes = map_create(); - - let cached_shaders_keys: string[] = map_keys(data_cached_shaders); - for (let i: i32 = 0; i < cached_shaders_keys.length; ++i) { - let c: shader_data_t = map_get(data_cached_shaders, cached_shaders_keys[i]); - shader_data_delete(c); - } - data_cached_shaders = map_create(); - - data_cached_scene_raws = map_create(); - data_cached_cameras = map_create(); - data_cached_materials = map_create(); - data_cached_worlds = map_create(); - render_path_unload(); - data_cached_blobs = map_create(); - - let cached_images_keys: string[] = map_keys(data_cached_images); - for (let i: i32 = 0; i < cached_images_keys.length; ++i) { - let c: gpu_texture_t = map_get(data_cached_images, cached_images_keys[i]); - gpu_delete_texture(c); - } - data_cached_images = map_create(); - - /// if arm_audio - let cached_sounds_keys: string[] = map_keys(data_cached_sounds); - for (let i: i32 = 0; i < cached_sounds_keys.length; ++i) { - let c: sound_t = map_get(data_cached_sounds, cached_sounds_keys[i]); - sound_unload(c); - } - data_cached_sounds = map_create(); - /// end - - let cached_videos_keys: string[] = map_keys(data_cached_videos); - for (let i: i32 = 0; i < cached_videos_keys.length; ++i) { - let c: video_t = map_get(data_cached_videos, cached_videos_keys[i]); - video_unload(c); - } - data_cached_videos = map_create(); - - let cached_fonts_keys: string[] = map_keys(data_cached_fonts); - for (let i: i32 = 0; i < cached_fonts_keys.length; ++i) { - let c: draw_font_t = map_get(data_cached_fonts, cached_fonts_keys[i]); - draw_font_destroy(c); - } - data_cached_fonts = map_create(); -} - -function data_sep(): string { - /// if arm_windows - return "\\"; - /// else - return "/"; - /// end -} - function data_path(): string { /// if arm_android - return "data" + data_sep(); + return "data" + PATH_SEP; /// else - return "." + data_sep() + "data" + data_sep(); + return "." + PATH_SEP + "data" + PATH_SEP; /// end } @@ -299,11 +238,6 @@ function data_is_up(file: string): bool { return char_at(file, 0) == "." && char_at(file, 1) == "."; } -function data_base_name(path: string): string { - let slash: i32 = string_last_index_of(path, data_sep()); - return slash >= 0 ? substring(path, slash + 1, path.length) : path; -} - function data_resolve_path(file: string): string { if (data_is_abs(file) || data_is_up(file)) { return file; diff --git a/base/sources/ts/mesh_data.ts b/base/sources/ts/mesh_data.ts index 3b7f329a..f76bf712 100644 --- a/base/sources/ts/mesh_data.ts +++ b/base/sources/ts/mesh_data.ts @@ -76,9 +76,6 @@ function mesh_data_build_vertices(vertex_buffer: gpu_buffer_t, vertex_arrays: ve function mesh_data_build_indices(index_buffer: gpu_buffer_t, index_array: u32_array_t) { let ia: u32_array_t = gpu_lock_index_buffer(index_buffer); - // for (let i: i32 = 0; i < ia.length; ++i) { - // ia[i] = index_array[i]; - // } memcpy(ia.buffer, index_array.buffer, ia.length * 4); gpu_index_buffer_unlock(index_buffer); } diff --git a/base/sources/ts/mesh_object.ts b/base/sources/ts/mesh_object.ts index d3e17490..92b13a6e 100644 --- a/base/sources/ts/mesh_object.ts +++ b/base/sources/ts/mesh_object.ts @@ -107,9 +107,3 @@ function mesh_object_render(raw: mesh_object_t, context: string, bind_params: st function mesh_object_valid_context(raw: mesh_object_t, mat: material_data_t, context: string): bool { return material_data_get_context(mat, context) != null; } - -function mesh_object_compute_camera_dist(raw: mesh_object_t, cam_x: f32, cam_y: f32, cam_z: f32) { - // Render path mesh sorting - raw.camera_dist = - vec4_fdist(cam_x, cam_y, cam_z, transform_world_x(raw.base.transform), transform_world_y(raw.base.transform), transform_world_z(raw.base.transform)); -} diff --git a/base/sources/ts/object.ts b/base/sources/ts/object.ts index 15af27ac..ed31f4bd 100644 --- a/base/sources/ts/object.ts +++ b/base/sources/ts/object.ts @@ -31,16 +31,13 @@ function object_create(is_empty: bool = true): object_t { return raw; } -function object_set_parent(raw: object_t, parent_object: object_t, parent_inv: bool = false, keep_transform: bool = false) { +function object_set_parent(raw: object_t, parent_object: object_t) { if (parent_object == raw || parent_object == raw.parent) { return; } if (raw.parent != null) { array_remove(raw.parent.children, raw); - if (keep_transform) { - transform_apply_parent(raw.transform); - } raw.parent = null; // rebuild matrix without a parent transform_build_matrix(raw.transform); } @@ -50,9 +47,6 @@ function object_set_parent(raw: object_t, parent_object: object_t, parent_inv: b } raw.parent = parent_object; array_push(raw.parent.children, raw); - if (parent_inv) { - transform_apply_parent_inv(raw.transform); - } } function object_remove_super(raw: object_t) { @@ -95,16 +89,3 @@ function object_get_child(raw: object_t, name: string): object_t { } return null; } - -function object_get_children(raw: object_t, recursive: bool = false): object_t[] { - if (!recursive) { - return raw.children; - } - - let ret_children: object_t[] = array_slice(raw.children, 0, raw.children.length); - for (let i: i32 = 0; i < raw.children.length; ++i) { - let c: object_t = raw.children[i]; - ret_children = array_concat(ret_children, object_get_children(c, recursive)); - } - return ret_children; -} diff --git a/base/sources/ts/render_path.ts b/base/sources/ts/render_path.ts index bfdedc85..ece400e8 100644 --- a/base/sources/ts/render_path.ts +++ b/base/sources/ts/render_path.ts @@ -14,11 +14,6 @@ type cached_shader_context_t = { context?: shader_context_t; }; -enum draw_order_t { - DIST, // Early-z - SHADER, // Less state changes -} - let render_path_commands: () => void = null; let render_path_render_targets: map_t = map_create(); let render_path_current_w: i32; @@ -27,12 +22,10 @@ let _render_path_frame_time: f32 = 0.0; let _render_path_frame: i32 = 0; let _render_path_current_target: render_target_t = null; let _render_path_current_image: gpu_texture_t = null; -let _render_path_draw_order: draw_order_t = draw_order_t.DIST; let _render_path_paused: bool = false; let _render_path_last_w: i32 = 0; let _render_path_last_h: i32 = 0; let _render_path_bind_params: string[]; -// let _render_path_meshes_sorted: bool; let _render_path_last_frame_time: f32 = 0.0; let _render_path_loading: i32 = 0; let _render_path_cached_shader_contexts: map_t = map_create(); @@ -45,27 +38,21 @@ function render_path_render_frame() { if (!render_path_ready() || _render_path_paused) { return; } - if (_render_path_last_w > 0 && (_render_path_last_w != sys_w() || _render_path_last_h != sys_h())) { render_path_resize(); } - _render_path_last_w = sys_w(); - _render_path_last_h = sys_h(); - + _render_path_last_w = sys_w(); + _render_path_last_h = sys_h(); _render_path_frame_time = sys_time() - _render_path_last_frame_time; _render_path_last_frame_time = sys_time(); - - render_path_current_w = sys_w(); - render_path_current_h = sys_h(); - // _render_path_meshes_sorted = false; - + render_path_current_w = sys_w(); + render_path_current_h = sys_h(); render_path_commands(); - _render_path_frame++; } -function render_path_set_target(target: string, additional: string[] = null, depth_buffer: string = null, flags: gpu_clear_t = gpu_clear_t.NONE, - color: i32 = 0, depth: f32 = 0.0) { +function render_path_set_target(target: string, additional: string[] = null, depth_buffer: string = null, flags: gpu_clear_t = gpu_clear_t.NONE, color: i32 = 0, + depth: f32 = 0.0) { if (_render_path_current_image != null) { render_path_end(); } @@ -104,53 +91,14 @@ function render_path_end() { _render_path_bind_params = null; } -function _render_path_sort_dist(a: any_ptr, b: any_ptr): i32 { - let ma: mesh_object_t = DEREFERENCE(a); - let mb: mesh_object_t = DEREFERENCE(b); - return ma.camera_dist >= mb.camera_dist ? 1 : -1; -} - -function render_path_sort_meshes_dist(meshes: mesh_object_t[]) { - array_sort(meshes, _render_path_sort_dist); -} - -function _render_path_sort_shader(a: any_ptr, b: any_ptr): i32 { - let ma: mesh_object_t = DEREFERENCE(a); - let mb: mesh_object_t = DEREFERENCE(b); - return strcmp(ma.material.name, mb.material.name); -} - -function render_path_sort_meshes_shader(meshes: mesh_object_t[]) { - array_sort(meshes, _render_path_sort_shader); -} - function render_path_draw_meshes(context: string) { render_path_submit_draw(context); render_path_end(); } function render_path_submit_draw(context: string) { - let camera: camera_object_t = scene_camera; let meshes: mesh_object_t[] = scene_meshes; _mesh_object_last_pipeline = null; - - // if (!_render_path_meshes_sorted && camera != null) { // Order max once per frame for now - // let cam_x: f32 = transform_world_x(camera.base.transform); - // let cam_y: f32 = transform_world_y(camera.base.transform); - // let cam_z: f32 = transform_world_z(camera.base.transform); - // for (let i: i32 = 0; i < meshes.length; ++i) { - // let mesh: mesh_object_t = meshes[i]; - // mesh_object_compute_camera_dist(mesh, cam_x, cam_y, cam_z); - // } - // if (_render_path_draw_order == draw_order_t.SHADER) { - // render_path_sort_meshes_shader(meshes); - // } - // else { - // render_path_sort_meshes_dist(meshes); - // } - // _render_path_meshes_sorted = true; - // } - for (let i: i32 = 0; i < meshes.length; ++i) { let mesh: mesh_object_t = meshes[i]; mesh_object_render(mesh, context, _render_path_bind_params); @@ -162,12 +110,9 @@ function render_path_draw_skydome(handle: string) { const_data_create_skydome_data(); } let cc: cached_shader_context_t = map_get(_render_path_cached_shader_contexts, handle); - if (cc.context == null) { - return; // World data not specified - } gpu_set_pipeline(cc.context._.pipe); uniforms_set_context_consts(cc.context, _render_path_bind_params); - uniforms_set_obj_consts(cc.context, null); // External hosek + uniforms_set_obj_consts(cc.context, null); gpu_set_vertex_buffer(const_data_skydome_vb); gpu_set_index_buffer(const_data_skydome_ib); gpu_draw(); @@ -184,8 +129,8 @@ function render_path_bind_target(target: string, uniform: string) { } } -// Full-screen triangle function render_path_draw_shader(handle: string) { + // Full-screen triangle // file/data_name/context let cc: cached_shader_context_t = map_get(_render_path_cached_shader_contexts, handle); if (const_data_screen_aligned_vb == null) { @@ -197,7 +142,6 @@ function render_path_draw_shader(handle: string) { gpu_set_vertex_buffer(const_data_screen_aligned_vb); gpu_set_index_buffer(const_data_screen_aligned_ib); gpu_draw(); - render_path_end(); } @@ -220,28 +164,10 @@ function render_path_load_shader(handle: string) { _render_path_loading--; } -function render_path_unload_shader(handle: string) { - map_delete(_render_path_cached_shader_contexts, handle); - - // file/data_name/context - let shader_path: string[] = string_split(handle, "/"); - // Todo: Handle context overrides (see data_get_shader()) - map_delete(data_cached_shaders, shader_path[1]); -} - -function render_path_unload() { - let render_targets_keys: string[] = map_keys(render_path_render_targets); - for (let i: i32 = 0; i < render_targets_keys.length; ++i) { - let rt: render_target_t = map_get(render_path_render_targets, render_targets_keys[i]); - render_target_unload(rt); - } -} - function render_path_resize() { if (iron_window_width() == 0 || iron_window_height() == 0) { return; } - let render_targets_keys: string[] = map_keys(render_path_render_targets); for (let i: i32 = 0; i < render_targets_keys.length; ++i) { let rt: render_target_t = map_get(render_path_render_targets, render_targets_keys[i]); @@ -302,9 +228,3 @@ function render_target_create(): render_target_t { raw.scale = 1.0; return raw; } - -function render_target_unload(raw: render_target_t) { - if (raw._image != null) { - gpu_delete_texture(raw._image); - } -} diff --git a/base/sources/ts/scene.ts b/base/sources/ts/scene.ts index 0fe84c2c..14ae3295 100644 --- a/base/sources/ts/scene.ts +++ b/base/sources/ts/scene.ts @@ -28,11 +28,7 @@ function scene_create(format: scene_t): object_t { // Startup scene let scene_object: object_t = scene_add_scene(format.name, null); - if (scene_cameras.length == 0) { - iron_log("No camera found for scene '" + format.name + "'"); - } - - scene_camera = scene_get_camera(format.camera_ref); + scene_camera = scene_cameras[0]; // format.camera_ref _scene_scene_parent = scene_object; return scene_object; } @@ -67,16 +63,13 @@ function scene_render_frame() { if (render_path_commands == null) { return; } - for (let i: i32 = 0; i < scene_empties.length; ++i) { let e: object_t = scene_empties[i]; if (e != null && e.parent != null) { transform_update(e.transform); } } - - // Render active camera - scene_camera != null ? camera_object_render_frame(scene_camera) : render_path_render_frame(); + camera_object_render_frame(scene_camera); } // Objects @@ -90,36 +83,6 @@ function scene_get_child(name: string): object_t { return object_get_child(_scene_root, name); } -function scene_get_mesh(name: string): mesh_object_t { - for (let i: i32 = 0; i < scene_meshes.length; ++i) { - let m: mesh_object_t = scene_meshes[i]; - if (m.base.name == name) { - return m; - } - } - return null; -} - -function scene_get_camera(name: string): camera_object_t { - for (let i: i32 = 0; i < scene_cameras.length; ++i) { - let c: camera_object_t = scene_cameras[i]; - if (c.base.name == name) { - return c; - } - } - return null; -} - -function scene_get_empty(name: string): object_t { - for (let i: i32 = 0; i < scene_empties.length; ++i) { - let e: object_t = scene_empties[i]; - if (e.name == name) { - return e; - } - } - return null; -} - function scene_add_mesh_object(data: mesh_data_t, material: material_data_t, parent: object_t = null): mesh_object_t { let object: mesh_object_t = mesh_object_create(data, material); parent != null ? object_set_parent(object.base, parent) : object_set_parent(object.base, _scene_root); @@ -238,9 +201,7 @@ function scene_create_object(o: obj_t, format: scene_t, parent: object_t): objec let object: object_t = scene_add_object(parent); return scene_return_object(object, o); } - else { - return null; - } + return null; } function scene_create_mesh_object(o: obj_t, format: scene_t, parent: object_t, material: material_data_t): object_t { @@ -268,10 +229,6 @@ function scene_return_mesh_object(object_file: string, data_ref: string, materia } function scene_return_object(object: object_t, o: obj_t): object_t { - return scene_return_object_loaded(object, o, null); -} - -function scene_return_object_loaded(object: object_t, o: obj_t, oactions: scene_t[]): object_t { if (object != null) { object.raw = o; object.name = o.name; diff --git a/base/sources/ts/transform.ts b/base/sources/ts/transform.ts index 8fff86a0..2507b4d2 100644 --- a/base/sources/ts/transform.ts +++ b/base/sources/ts/transform.ts @@ -1,7 +1,6 @@ type transform_t = { world?: mat4_t; - local_only?: bool; local?: mat4_t; loc?: vec4_t; rot?: quat_t; @@ -16,7 +15,6 @@ type transform_t = { function transform_create(object: object_t): transform_t { let raw: transform_t = {}; - raw.local_only = false; raw.scale_world = 1.0; raw.object = object; transform_reset(raw); @@ -42,14 +40,9 @@ function transform_update(raw: transform_t) { } function transform_build_matrix(raw: transform_t) { - // if (vec4_isnan(raw.dloc)) { raw.local = mat4_compose(raw.loc, raw.rot, raw.scale); - // } - // else { - // transform_compose_delta(raw); - // } - if (raw.object.parent != null && !raw.local_only) { + if (raw.object.parent != null) { raw.world = mat4_mult_mat3x4(raw.local, raw.object.parent.transform.world); } else { @@ -83,25 +76,12 @@ function transform_build_matrix(raw: transform_t) { raw.dirty = false; } -function transform_translate(raw: transform_t, x: f32, y: f32, z: f32) { - raw.loc.x += x; - raw.loc.y += y; - raw.loc.z += z; - transform_build_matrix(raw); -} - function transform_set_matrix(raw: transform_t, mat: mat4_t) { raw.local = mat4_clone(mat); transform_decompose(raw); transform_build_matrix(raw); } -function transform_mult_matrix(raw: transform_t, mat: mat4_t) { - raw.local = mat4_mult_mat(raw.local, mat); - transform_decompose(raw); - transform_build_matrix(raw); -} - function transform_decompose(raw: transform_t) { let dec: mat4_decomposed_t = mat4_decompose(raw.local); raw.loc = dec.loc; @@ -120,11 +100,6 @@ function transform_move(raw: transform_t, axis: vec4_t, f: f32 = 1.0) { transform_build_matrix(raw); } -function transform_set_rot(raw: transform_t, x: f32, y: f32, z: f32) { - raw.rot = quat_from_euler(x, y, z); - raw.dirty = true; -} - function transform_compute_radius(raw: transform_t) { raw.radius = math_sqrt(raw.dim.x * raw.dim.x + raw.dim.y * raw.dim.y + raw.dim.z * raw.dim.z); } @@ -148,23 +123,6 @@ function transform_compute_dim(raw: transform_t) { transform_compute_radius(raw); } -function transform_apply_parent_inv(raw: transform_t) { - let pt: transform_t = raw.object.parent.transform; - transform_build_matrix(pt); - let pinv: mat4_t = mat4_inv(pt.world); - raw.local = mat4_mult_mat(raw.local, pinv); - transform_decompose(raw); - transform_build_matrix(raw); -} - -function transform_apply_parent(raw: transform_t) { - let pt: transform_t = raw.object.parent.transform; - transform_build_matrix(pt); - raw.local = mat4_mult_mat(raw.local, pt.world); - transform_decompose(raw); - transform_build_matrix(raw); -} - function transform_look(raw: transform_t): vec4_t { return mat4_look(raw.world); } diff --git a/paint/sources/slot_layer.ts b/paint/sources/slot_layer.ts index 32a07fc4..f4faffe5 100644 --- a/paint/sources/slot_layer.ts +++ b/paint/sources/slot_layer.ts @@ -862,7 +862,7 @@ function layers_make_temp_img() { 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)) { let _temptex0: render_target_t = map_get(render_path_render_targets, "temptex0"); - render_target_unload(_temptex0); + gpu_delete_texture(_temptex0._image); map_delete(render_path_render_targets, "temptex0"); layers_temp_image = null; }