Skip to content

Commit

Permalink
gc fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
luboslenco committed Nov 23, 2024
1 parent 981f12e commit e4f4ebc
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 41 deletions.
75 changes: 39 additions & 36 deletions base/sources/export_arm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,44 +125,47 @@ function export_arm_run_project() {
let same_drive: bool = project_raw.envmap != null ? char_at(project_filepath, 0) == char_at(project_raw.envmap, 0) : true;
///end

project_raw = {
version: manifest_version,
material_groups: mgroups,
assets: texture_files,
packed_assets: packed_assets,
swatches: project_raw.swatches,
envmap: project_raw.envmap != null ?
(same_drive ?
path_to_relative(project_filepath, project_raw.envmap) :
project_raw.envmap) :
null,
envmap_strength: scene_world.strength,
camera_world: mat4_to_f32_array(scene_camera.base.transform.local),
camera_origin: export_arm_vec3f32(camera_origins[0].v),
camera_fov: scene_camera.data.fov,

///if (is_paint || is_sculpt)
mesh_datas: md,
material_nodes: mnodes,
brush_nodes: bnodes,
layer_datas: ld,
font_assets: font_files,
mesh_assets: mesh_files,
atlas_objects: project_atlas_objects,
atlas_names: project_atlas_names,
///end
project_raw.version = manifest_version;
project_raw.material_groups = mgroups;
project_raw.assets = texture_files;
project_raw.packed_assets = packed_assets;
project_raw.swatches = project_raw.swatches;
project_raw.envmap = project_raw.envmap != null ?
(same_drive ?
path_to_relative(project_filepath, project_raw.envmap) :
project_raw.envmap) :
null;
project_raw.envmap_strength = scene_world.strength;
project_raw.camera_world = mat4_to_f32_array(scene_camera.base.transform.local);
project_raw.camera_origin = export_arm_vec3f32(camera_origins[0].v);
project_raw.camera_fov = scene_camera.data.fov;

///if is_lab
mesh_data: md,
material: c,
///end
///if (is_paint || is_sculpt)
// project_raw.mesh_datas = md; // TODO: fix GC ref
project_raw.mesh_datas.length = 0;
for (let i: i32 = 0; i < md.length; ++i) {
array_push(project_raw.mesh_datas, md[i]);
}

project_raw.material_nodes = mnodes;
project_raw.brush_nodes = bnodes;
project_raw.layer_datas = ld;
project_raw.font_assets = font_files;
project_raw.mesh_assets = mesh_files;
project_raw.atlas_objects = project_atlas_objects;
project_raw.atlas_names = project_atlas_names;
///end

///if (arm_metal || arm_vulkan)
is_bgra: true
///else
is_bgra: false
///end
};
///if is_lab
project_raw.mesh_data = md;
project_raw.material = c;
///end

///if (arm_metal || arm_vulkan)
project_raw.is_bgra = true;
///else
project_raw.is_bgra = false;
///end

///if (arm_android || arm_ios)
let rt: render_target_t = map_get(render_path_render_targets, context_raw.render_mode == render_mode_t.FORWARD ? "buf" : "tex");
Expand Down
2 changes: 1 addition & 1 deletion base/sources/import_arm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,7 @@ function import_arm_run_swatches_from_project(project: project_format_t, path: s

if (project.swatches != null) {
for (let i: i32 = 0; i < project.swatches.length; ++i) {
let s: swatch_color_t = project.swatches[i];
let s: swatch_color_t = util_clone_swatch_color(project.swatches[i]);
array_push(project_raw.swatches, s);
}
}
Expand Down
5 changes: 3 additions & 2 deletions base/sources/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ let _project_unwrap_mesh_box_skip_ui: bool;
let _project_import_asset_hdr_as_envmap: bool;
let _project_import_swatches_replace_existing: bool;
let _project_reimport_texture_asset: asset_t;
let _project_scene_mesh_gc: scene_t;

function project_open() {
ui_files_show("arm", false, false, function (path: string) {
Expand Down Expand Up @@ -209,8 +210,8 @@ function project_new(reset_layers: bool = true) {
}
else {
let b: buffer_t = data_get_blob("meshes/" + project_mesh_list[context_raw.project_type] + ".arm");
let scene: scene_t = armpack_decode(b);
raw = scene.mesh_datas[0];
_project_scene_mesh_gc = armpack_decode(b);
raw = _project_scene_mesh_gc.mesh_datas[0];
}

let md: mesh_data_t = mesh_data_create(raw);
Expand Down
4 changes: 3 additions & 1 deletion base/sources/slot_brush.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ function slot_brush_create(c: ui_node_canvas_t = null): slot_brush_t {
slot_brush_default_canvas = b;
}
raw.canvas = armpack_decode(slot_brush_default_canvas);
raw.canvas = util_clone_canvas(raw.canvas); // Clone to create GC references

let id: i32 = (raw.id + 1);
raw.canvas.name = "Brush " + id;
}
else {
raw.canvas = c;
raw.canvas = util_clone_canvas(c);
}

return raw;
Expand Down
3 changes: 2 additions & 1 deletion base/sources/slot_material.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ function slot_material_create(m: material_data_t = null, c: ui_node_canvas_t = n
slot_material_default_canvas = b;
}
raw.canvas = armpack_decode(slot_material_default_canvas);
raw.canvas = util_clone_canvas(raw.canvas); // Clone to create GC references
let id: i32 = (raw.id + 1);
raw.canvas.name = "Material " + id;
}
else {
raw.canvas = c;
raw.canvas = util_clone_canvas(c);
}

///if (arm_android || arm_ios)
Expand Down
14 changes: 14 additions & 0 deletions base/sources/util_clone.ts
Original file line number Diff line number Diff line change
Expand Up @@ -380,3 +380,17 @@ function util_clone_obj(o: obj_t): obj_t {
}
return r;
}

function util_clone_swatch_color(s: swatch_color_t): swatch_color_t {
let r: swatch_color_t = {};
r.base = s.base;
r.opacity = s.opacity;
r.occlusion = s.occlusion;
r.roughness = s.roughness;
r.metallic = s.metallic;
r.normal = s.normal;
r.emission = s.emission;
r.height = s.height;
r.subsurface = s.subsurface;
return r;
}

0 comments on commit e4f4ebc

Please sign in to comment.