gc fixes
This commit is contained in:
+38
-35
@@ -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,
|
||||
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_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
|
||||
///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]);
|
||||
}
|
||||
|
||||
///if is_lab
|
||||
mesh_data: md,
|
||||
material: c,
|
||||
///end
|
||||
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");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user