This commit is contained in:
luboslenco
2024-02-19 17:07:09 +01:00
parent 3f57cc5330
commit a87a79141b
45 changed files with 1805 additions and 1892 deletions
+68 -70
View File
@@ -79,62 +79,61 @@ class ImportMesh {
let raw = ImportMesh.rawMesh(mesh);
if (mesh.cola != null) raw.vertex_arrays.push({ values: mesh.cola, attrib: "col", data: "short4norm", padding: 1 });
mesh_data_create(raw, (md: mesh_data_t) => {
Context.raw.paintObject = Context.mainObject();
let md: mesh_data_t = mesh_data_create(raw);
Context.raw.paintObject = Context.mainObject();
Context.selectPaintObject(Context.mainObject());
for (let i = 0; i < Project.paintObjects.length; ++i) {
let p = Project.paintObjects[i];
if (p == Context.raw.paintObject) continue;
data_delete_mesh(p.data._handle);
mesh_object_remove(p);
Context.selectPaintObject(Context.mainObject());
for (let i = 0; i < Project.paintObjects.length; ++i) {
let p = Project.paintObjects[i];
if (p == Context.raw.paintObject) continue;
data_delete_mesh(p.data._handle);
mesh_object_remove(p);
}
let handle = Context.raw.paintObject.data._handle;
if (handle != "SceneSphere" && handle != "ScenePlane") {
data_delete_mesh(handle);
}
if (ImportMesh.clearLayers) {
while (Project.layers.length > 0) {
let l = Project.layers.pop();
SlotLayer.unload(l);
}
let handle = Context.raw.paintObject.data._handle;
if (handle != "SceneSphere" && handle != "ScenePlane") {
data_delete_mesh(handle);
Base.newLayer(false);
app_notify_on_init(Base.initLayers);
History.reset();
}
mesh_object_set_data(Context.raw.paintObject, md);
Context.raw.paintObject.base.name = mesh.name;
Project.paintObjects = [Context.raw.paintObject];
md._handle = raw.name;
data_cached_meshes.set(md._handle, md);
Context.raw.ddirty = 4;
UIBase.hwnds[TabArea.TabSidebar0].redraws = 2;
UIBase.hwnds[TabArea.TabSidebar1].redraws = 2;
// Wait for addMesh calls to finish
app_notify_on_init(ImportMesh.finishImport);
Base.notifyOnNextFrame(() => {
let f32 = new Float32Array(Config.getTextureResX() * Config.getTextureResY() * 4);
for (let i = 0; i < Math.floor(mesh.inda.length); ++i) {
let index = mesh.inda[i];
f32[i * 4] = mesh.posa[index * 4] / 32767;
f32[i * 4 + 1] = mesh.posa[index * 4 + 1] / 32767;
f32[i * 4 + 2] = mesh.posa[index * 4 + 2] / 32767;
f32[i * 4 + 3] = 1.0;
}
if (ImportMesh.clearLayers) {
while (Project.layers.length > 0) {
let l = Project.layers.pop();
SlotLayer.unload(l);
}
Base.newLayer(false);
app_notify_on_init(Base.initLayers);
History.reset();
}
mesh_object_set_data(Context.raw.paintObject, md);
Context.raw.paintObject.base.name = mesh.name;
Project.paintObjects = [Context.raw.paintObject];
md._handle = raw.name;
data_cached_meshes.set(md._handle, md);
Context.raw.ddirty = 4;
UIBase.hwnds[TabArea.TabSidebar0].redraws = 2;
UIBase.hwnds[TabArea.TabSidebar1].redraws = 2;
// Wait for addMesh calls to finish
app_notify_on_init(ImportMesh.finishImport);
Base.notifyOnNextFrame(() => {
let f32 = new Float32Array(Config.getTextureResX() * Config.getTextureResY() * 4);
for (let i = 0; i < Math.floor(mesh.inda.length); ++i) {
let index = mesh.inda[i];
f32[i * 4] = mesh.posa[index * 4] / 32767;
f32[i * 4 + 1] = mesh.posa[index * 4 + 1] / 32767;
f32[i * 4 + 2] = mesh.posa[index * 4 + 2] / 32767;
f32[i * 4 + 3] = 1.0;
}
let imgmesh = image_from_bytes(f32.buffer, Config.getTextureResX(), Config.getTextureResY(), tex_format_t.RGBA128);
let texpaint = Project.layers[0].texpaint;
g2_begin(texpaint, false);
g2_set_pipeline(Base.pipeCopy128);
g2_draw_scaled_image(imgmesh, 0, 0, Config.getTextureResX(), Config.getTextureResY());
g2_set_pipeline(null);
g2_end();
});
let imgmesh = image_from_bytes(f32.buffer, Config.getTextureResX(), Config.getTextureResY(), tex_format_t.RGBA128);
let texpaint = Project.layers[0].texpaint;
g2_begin(texpaint, false);
g2_set_pipeline(Base.pipeCopy128);
g2_draw_scaled_image(imgmesh, 0, 0, Config.getTextureResX(), Config.getTextureResY());
g2_set_pipeline(null);
g2_end();
});
}
@@ -147,29 +146,28 @@ class ImportMesh {
let raw = ImportMesh.rawMesh(mesh);
if (mesh.cola != null) raw.vertex_arrays.push({ values: mesh.cola, attrib: "col", data: "short4norm", padding: 1 });
mesh_data_create(raw, (md: mesh_data_t) => {
let md: mesh_data_t = mesh_data_create(raw);
let object = scene_add_mesh_object(md, Context.raw.paintObject.materials, Context.raw.paintObject.base);
object.base.name = mesh.base.name;
object.skip_context = "paint";
let object = scene_add_mesh_object(md, Context.raw.paintObject.materials, Context.raw.paintObject.base);
object.base.name = mesh.base.name;
object.skip_context = "paint";
// Ensure unique names
for (let p of Project.paintObjects) {
if (p.base.name == object.base.name) {
p.base.name += ".001";
p.data._handle += ".001";
data_cached_meshes.set(p.data._handle, p.data);
}
// Ensure unique names
for (let p of Project.paintObjects) {
if (p.base.name == object.base.name) {
p.base.name += ".001";
p.data._handle += ".001";
data_cached_meshes.set(p.data._handle, p.data);
}
}
Project.paintObjects.push(object);
Project.paintObjects.push(object);
md._handle = raw.name;
data_cached_meshes.set(md._handle, md);
md._handle = raw.name;
data_cached_meshes.set(md._handle, md);
Context.raw.ddirty = 4;
UIBase.hwnds[TabArea.TabSidebar0].redraws = 2;
});
Context.raw.ddirty = 4;
UIBase.hwnds[TabArea.TabSidebar0].redraws = 2;
}
_addMesh();