From ba4837722306f9c3cda736040fe5aec64974f9eb Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 30 Jan 2024 23:55:35 +0100 Subject: [PATCH] Prepare iron to c port --- armorforge/Sources/TabObjects.ts | 4 +- armorlab/Sources/MakeMaterial.ts | 74 +++++------ armorlab/Sources/MakePaint.ts | 2 +- armorlab/Sources/RenderPathPaint.ts | 6 +- armorlab/Sources/UINodesExt.ts | 6 +- armorpaint/Sources/MakeMaterial.ts | 165 +++++++++++++------------ armorpaint/Sources/MakeMeshPreview.ts | 2 +- armorpaint/Sources/MakePaint.ts | 2 +- armorpaint/Sources/RenderPathPaint.ts | 14 +-- armorpaint/Sources/SlotMaterial.ts | 4 +- armorsculpt/Sources/ExportObj.ts | 4 +- armorsculpt/Sources/ImportMesh.ts | 22 ++-- armorsculpt/Sources/MakeMaterial.ts | 154 ++++++++++++----------- armorsculpt/Sources/MakeSculpt.ts | 2 +- base/Sources/BoxExport.ts | 2 +- base/Sources/BoxPreferences.ts | 2 +- base/Sources/Context.ts | 8 +- base/Sources/ContextFormat.ts | 2 +- base/Sources/ExportArm.ts | 8 +- base/Sources/ExportObj.ts | 4 +- base/Sources/ImportArm.ts | 22 ++-- base/Sources/ImportEnvmap.ts | 16 +-- base/Sources/ImportMesh.ts | 22 ++-- base/Sources/MakeVoxel.ts | 14 +-- base/Sources/PhysicsBody.ts | 28 ++--- base/Sources/Project.ts | 29 ++--- base/Sources/RenderPathRaytrace.ts | 12 +- base/Sources/RenderPathRaytraceBake.ts | 4 +- base/Sources/TabMeshes.ts | 7 +- base/Sources/UIBase.ts | 16 +-- base/Sources/UIMenu.ts | 4 +- base/Sources/UIMenubar.ts | 3 +- base/Sources/UniformsExt.ts | 18 +-- base/Sources/UtilMesh.ts | 70 +++++------ base/Sources/UtilParticle.ts | 2 +- base/Sources/UtilRender.ts | 16 +-- base/Sources/UtilUV.ts | 10 +- base/Sources/Viewport.ts | 10 +- 38 files changed, 407 insertions(+), 383 deletions(-) diff --git a/armorforge/Sources/TabObjects.ts b/armorforge/Sources/TabObjects.ts index 158ec8c7..50f0f094 100644 --- a/armorforge/Sources/TabObjects.ts +++ b/armorforge/Sources/TabObjects.ts @@ -95,7 +95,7 @@ class TabObjects { } } - Data.getMaterial("Scene", "TempMaterial" + TabObjects.materialId, (md: MaterialData) => { + Data.getMaterial("Scene", "TempMaterial" + TabObjects.materialId, (md: TMaterialData) => { let mo: MeshObject = currentObject as MeshObject; mo.materials = [md]; MakeMaterial.parseMeshPreviewMaterial(md); @@ -228,7 +228,7 @@ class TabObjects { if (Context.raw.selectedObject.name == "Scene") { let p = Scene.world; - p.raw.strength = ui.slider(Zui.handle("tabobjects_16", {value: p.raw.strength}), "Environment", 0.0, 5.0, true); + p.strength = ui.slider(Zui.handle("tabobjects_16", {value: p.strength}), "Environment", 0.0, 5.0, true); } else if (Context.raw.selectedObject.constructor == LightObject) { let light = (Context.raw.selectedObject as LightObject); diff --git a/armorlab/Sources/MakeMaterial.ts b/armorlab/Sources/MakeMaterial.ts index 156a9396..4406aae2 100644 --- a/armorlab/Sources/MakeMaterial.ts +++ b/armorlab/Sources/MakeMaterial.ts @@ -1,35 +1,36 @@ class MakeMaterial { - static defaultScon: ShaderContext = null; - static defaultMcon: MaterialContext = null; + static defaultScon: TShaderContext = null; + static defaultMcon: TMaterialContext = null; static heightUsed = false; static parseMeshMaterial = () => { let m = Project.materialData; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + for (let c of m._shader.contexts) { + if (c.name == "mesh") { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); MakeMaterial.deleteContext(c); break; } } let con = MakeMesh.run({ name: "Material", canvas: null }); - let scon = new ShaderContext(con.data, (scon: ShaderContext) => {}); - scon.overrideContext = {}; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { scon = _scon; }); + scon._overrideContext = {}; if (con.frag.sharedSamplers.length > 0) { let sampler = con.frag.sharedSamplers[0]; - scon.overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); + scon._overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); } if (!Context.raw.textureFilter) { - scon.overrideContext.filter = "point"; + scon._overrideContext.filter = "point"; } - scon.overrideContext.addressing = "repeat"; - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + scon._overrideContext.addressing = "repeat"; + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); Context.raw.ddirty = 2; @@ -43,12 +44,12 @@ class MakeMaterial { } ///if arm_voxels - static makeVoxel = (m: MaterialData) => { + static makeVoxel = (m: TMaterialData) => { let rebuild = true; // heightUsed; if (Config.raw.rp_gi != false && rebuild) { - let scon: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "voxel") { + let scon: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "voxel") { scon = c; break; } @@ -60,20 +61,20 @@ class MakeMaterial { static parsePaintMaterial = () => { let m = Project.materialData; - let scon: ShaderContext = null; - let mcon: MaterialContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "paint") { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + let scon: TShaderContext = null; + let mcon: TMaterialContext = null; + for (let c of m._shader.contexts) { + if (c.name == "paint") { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); if (c != MakeMaterial.defaultScon) MakeMaterial.deleteContext(c); break; } } for (let c of m.contexts) { - if (c.raw.name == "paint") { - array_remove(m.raw.contexts, c.raw); + if (c.name == "paint") { array_remove(m.contexts, c); + array_remove(m._contexts, c); break; } } @@ -83,18 +84,21 @@ class MakeMaterial { let con = MakePaint.run(sdata, mcon2); let compileError = false; - let scon2 = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + let scon2: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon2 = _scon; }); if (compileError) return; - scon2.overrideContext = {}; - scon2.overrideContext.addressing = "repeat"; - let mcon3 = new MaterialContext(mcon2, (mcon: MaterialContext) => {}); + scon2._overrideContext = {}; + scon2._overrideContext.addressing = "repeat"; + let mcon3: TMaterialContext; + MaterialContext.create(mcon2, (_mcon: TMaterialContext) => { mcon3 = _mcon; }); - m.shader.raw.contexts.push(scon2.raw); - m.shader.contexts.push(scon2); - m.raw.contexts.push(mcon3.raw); + m._shader.contexts.push(scon2); + m._shader._contexts.push(scon2); m.contexts.push(mcon3); + m._contexts.push(mcon3); if (MakeMaterial.defaultScon == null) MakeMaterial.defaultScon = scon2; if (MakeMaterial.defaultMcon == null) MakeMaterial.defaultMcon = mcon3; @@ -110,9 +114,9 @@ class MakeMaterial { return `const vec3 voxelgiHalfExtents = vec3(${ext}, ${ext}, ${ext});`; } - static deleteContext = (c: ShaderContext) => { + static deleteContext = (c: TShaderContext) => { Base.notifyOnNextFrame(() => { // Ensure pipeline is no longer in use - c.delete(); + ShaderContext.delete(c); }); } } diff --git a/armorlab/Sources/MakePaint.ts b/armorlab/Sources/MakePaint.ts index 8b7242c1..6f299822 100644 --- a/armorlab/Sources/MakePaint.ts +++ b/armorlab/Sources/MakePaint.ts @@ -18,7 +18,7 @@ class MakePaint { con_paint.data.color_writes_green = [true, true, true, true]; con_paint.data.color_writes_blue = [true, true, true, true]; con_paint.data.color_writes_alpha = [true, true, true, true]; - con_paint.allow_vcols = Context.raw.paintObject.data.cols != null; + con_paint.allow_vcols = MeshData.getVArray(Context.raw.paintObject.data, "col") != null; let vert = NodeShaderContext.make_vert(con_paint); let frag = NodeShaderContext.make_frag(con_paint); diff --git a/armorlab/Sources/RenderPathPaint.ts b/armorlab/Sources/RenderPathPaint.ts index f541105d..3fa80112 100644 --- a/armorlab/Sources/RenderPathPaint.ts +++ b/armorlab/Sources/RenderPathPaint.ts @@ -205,11 +205,11 @@ class RenderPathPaint { helpMat.getInverse(Scene.camera.VP); g.setMatrix(Base.cursorInvVP, helpMat); ///if (krom_metal || krom_vulkan) - g.setVertexBuffer(geom.get([{name: "tex", data: "short2norm"}])); + g.setVertexBuffer(MeshData.get(geom, [{name: "tex", data: "short2norm"}])); ///else - g.setVertexBuffer(geom.vertexBuffer); + g.setVertexBuffer(geom._vertexBuffer); ///end - g.setIndexBuffer(geom.indexBuffers[0]); + g.setIndexBuffer(geom._indexBuffers[0]); g.drawIndexedVertices(); g.disableScissor(); diff --git a/armorlab/Sources/UINodesExt.ts b/armorlab/Sources/UINodesExt.ts index c0c1da53..b52f3c32 100644 --- a/armorlab/Sources/UINodesExt.ts +++ b/armorlab/Sources/UINodesExt.ts @@ -90,7 +90,7 @@ class UINodesExt { // Make copy of vertices before displacement let o = Project.paintObjects[0]; let g = o.data; - let vertices = g.vertexBuffer.lock(); + let vertices = g._vertexBuffer.lock(); if (UINodesExt.lastVertices == null || UINodesExt.lastVertices.byteLength != vertices.byteLength) { UINodesExt.lastVertices = new DataView(new ArrayBuffer(vertices.byteLength)); for (let i = 0; i < Math.floor(vertices.byteLength / 2); ++i) { @@ -102,7 +102,7 @@ class UINodesExt { vertices.setInt16(i * 2, UINodesExt.lastVertices.getInt16(i * 2, true), true); } } - g.vertexBuffer.unlock(); + g._vertexBuffer.unlock(); // Apply displacement if (Config.raw.displace_strength > 0) { @@ -110,7 +110,7 @@ class UINodesExt { Base.notifyOnNextFrame(() => { Console.progress(tr("Apply Displacement")); Base.notifyOnNextFrame(() => { - let uv_scale = Scene.meshes[0].data.scaleTex * Context.raw.brushScale; + let uv_scale = Scene.meshes[0].data.scale_tex * Context.raw.brushScale; UtilMesh.applyDisplacement(texpaint_pack, 0.05 * Config.raw.displace_strength, uv_scale); UtilMesh.calcNormals(); taskDone(); diff --git a/armorpaint/Sources/MakeMaterial.ts b/armorpaint/Sources/MakeMaterial.ts index cbfc6362..9224fb4d 100644 --- a/armorpaint/Sources/MakeMaterial.ts +++ b/armorpaint/Sources/MakeMaterial.ts @@ -1,8 +1,8 @@ class MakeMaterial { - static defaultScon: ShaderContext = null; - static defaultMcon: MaterialContext = null; + static defaultScon: TShaderContext = null; + static defaultMcon: TMaterialContext = null; static heightUsed = false; static emisUsed = false; @@ -16,10 +16,10 @@ class MakeMaterial { static parseMeshMaterial = () => { let m = Project.materials[0].data; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + for (let c of m._shader._contexts) { + if (c.name == "mesh") { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); MakeMaterial.deleteContext(c); break; } @@ -27,12 +27,12 @@ class MakeMaterial { if (MakeMesh.layerPassCount > 1) { let i = 0; - while (i < m.shader.contexts.length) { - let c = m.shader.contexts[i]; + while (i < m._shader._contexts.length) { + let c = m._shader._contexts[i]; for (let j = 1; j < MakeMesh.layerPassCount; ++j) { - if (c.raw.name == "mesh" + j) { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + if (c.name == "mesh" + j) { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); MakeMaterial.deleteContext(c); i--; break; @@ -42,12 +42,12 @@ class MakeMaterial { } i = 0; - while (i < m.contexts.length) { - let c = m.contexts[i]; + while (i < m._contexts.length) { + let c = m._contexts[i]; for (let j = 1; j < MakeMesh.layerPassCount; ++j) { - if (c.raw.name == "mesh" + j) { - array_remove(m.raw.contexts, c.raw); + if (c.name == "mesh" + j) { array_remove(m.contexts, c); + array_remove(m._contexts, c); i--; break; } @@ -57,35 +57,38 @@ class MakeMaterial { } let con = MakeMesh.run({ name: "Material", canvas: null }); - let scon = new ShaderContext(con.data, (scon: ShaderContext) => {}); - scon.overrideContext = {}; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { scon = _scon; }); + scon._overrideContext = {}; if (con.frag.sharedSamplers.length > 0) { let sampler = con.frag.sharedSamplers[0]; - scon.overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); + scon._overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); } if (!Context.raw.textureFilter) { - scon.overrideContext.filter = "point"; + scon._overrideContext.filter = "point"; } - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); for (let i = 1; i < MakeMesh.layerPassCount; ++i) { let con = MakeMesh.run({ name: "Material", canvas: null }, i); - let scon = new ShaderContext(con.data, (scon: ShaderContext) => {}); - scon.overrideContext = {}; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { scon = _scon; }); + scon._overrideContext = {}; if (con.frag.sharedSamplers.length > 0) { let sampler = con.frag.sharedSamplers[0]; - scon.overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); + scon._overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); } if (!Context.raw.textureFilter) { - scon.overrideContext.filter = "point"; + scon._overrideContext.filter = "point"; } - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); - let mcon = new MaterialContext({ name: "mesh" + i, bind_textures: [] }, (self: MaterialContext) => {}); - m.raw.contexts.push(mcon.raw); + let mcon: TMaterialContext; + MaterialContext.create({ name: "mesh" + i, bind_textures: [] }, (self: TMaterialContext) => { mcon = self; }); m.contexts.push(mcon); + m._contexts.push(mcon); } Context.raw.ddirty = 2; @@ -101,46 +104,47 @@ class MakeMaterial { static parseParticleMaterial = () => { let m = Context.raw.particleMaterial; - let sc: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { + let sc: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "mesh") { sc = c; break; } } if (sc != null) { - array_remove(m.shader.raw.contexts, sc.raw); - array_remove(m.shader.contexts, sc); + array_remove(m._shader.contexts, sc); + array_remove(m._shader._contexts, sc); } let con = MakeParticle.run({ name: "MaterialParticle", canvas: null }); if (sc != null) MakeMaterial.deleteContext(sc); - sc = new ShaderContext(con.data, (sc: ShaderContext) => {}); - m.shader.raw.contexts.push(sc.raw); - m.shader.contexts.push(sc); + ShaderContext.create(con.data, (_sc: TShaderContext) => { sc = _sc; }); + m._shader.contexts.push(sc); + m._shader._contexts.push(sc); } - static parseMeshPreviewMaterial = (md: MaterialData = null) => { + static parseMeshPreviewMaterial = (md: TMaterialData = null) => { if (!MakeMaterial.getMOut()) return; let m = md == null ? Project.materials[0].data : md; - let scon: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { + let scon: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "mesh") { scon = c; break; } } - array_remove(m.shader.raw.contexts, scon.raw); - array_remove(m.shader.contexts, scon); + + array_remove(m._shader.contexts, scon); + array_remove(m._shader._contexts, scon); let mcon: TMaterialContext = { name: "mesh", bind_textures: [] }; let sd: TMaterial = { name: "Material", canvas: null }; let con = MakeMeshPreview.run(sd, mcon); - for (let i = 0; i < m.contexts.length; ++i) { - if (m.contexts[i].raw.name == "mesh") { - m.contexts[i] = new MaterialContext(mcon, (self: MaterialContext) => {}); + for (let i = 0; i < m._contexts.length; ++i) { + if (m._contexts[i].name == "mesh") { + MaterialContext.create(mcon, (self: TMaterialContext) => { m._contexts[i] = self; }); break; } } @@ -148,22 +152,23 @@ class MakeMaterial { if (scon != null) MakeMaterial.deleteContext(scon); let compileError = false; - scon = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon = _scon; }); if (compileError) return; - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); } ///if arm_voxels - static makeVoxel = (m: MaterialData) => { + static makeVoxel = (m: TMaterialData) => { let rebuild = MakeMaterial.heightUsed; if (Config.raw.rp_gi != false && rebuild) { - let scon: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "voxel") { + let scon: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "voxel") { scon = c; break; } @@ -184,20 +189,20 @@ class MakeMaterial { } let m = Project.materials[0].data; - // let scon: ShaderContext = null; - // let mcon: MaterialContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "paint") { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + // let scon: TShaderContext = null; + // let mcon: TMaterialContext = null; + for (let c of m._shader._contexts) { + if (c.name == "paint") { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); if (c != MakeMaterial.defaultScon) MakeMaterial.deleteContext(c); break; } } - for (let c of m.contexts) { - if (c.raw.name == "paint") { - array_remove(m.raw.contexts, c.raw); + for (let c of m._contexts) { + if (c.name == "paint") { array_remove(m.contexts, c); + array_remove(m._contexts, c); break; } } @@ -207,18 +212,21 @@ class MakeMaterial { let con = MakePaint.run(sdata, tmcon); let compileError = false; - let scon = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon = _scon; }); if (compileError) return; - scon.overrideContext = {}; - scon.overrideContext.addressing = "repeat"; - let mcon = new MaterialContext(tmcon, (mcon: MaterialContext) => {}); + scon._overrideContext = {}; + scon._overrideContext.addressing = "repeat"; + let mcon: TMaterialContext; + MaterialContext.create(tmcon, (_mcon: TMaterialContext) => { mcon = _mcon; }); - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); - m.raw.contexts.push(mcon.raw); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); m.contexts.push(mcon); + m._contexts.push(mcon); if (MakeMaterial.defaultScon == null) MakeMaterial.defaultScon = scon; if (MakeMaterial.defaultMcon == null) MakeMaterial.defaultMcon = mcon; @@ -339,17 +347,20 @@ class MakeMaterial { } } - static parseNodePreviewMaterial = (node: TNode, group: TNodeCanvas = null, parents: TNode[] = null): { scon: ShaderContext, mcon: MaterialContext } => { + static parseNodePreviewMaterial = (node: TNode, group: TNodeCanvas = null, parents: TNode[] = null): { scon: TShaderContext, mcon: TMaterialContext } => { if (node.outputs.length == 0) return null; let sdata: TMaterial = { name: "Material", canvas: UINodes.getCanvasMaterial() }; let mcon_raw: TMaterialContext = { name: "mesh", bind_textures: [] }; let con = MakeNodePreview.run(sdata, mcon_raw, node, group, parents); let compileError = false; - let scon = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon = _scon; }); if (compileError) return null; - let mcon = new MaterialContext(mcon_raw, (mcon: MaterialContext) => {}); + let mcon: TMaterialContext; + MaterialContext.create(mcon_raw, (_mcon: TMaterialContext) => { mcon = _mcon; }); return { scon: scon, mcon: mcon }; } @@ -480,9 +491,9 @@ class MakeMaterial { return `const vec3 voxelgiHalfExtents = vec3(${ext}, ${ext}, ${ext});`; } - static deleteContext = (c: ShaderContext) => { + static deleteContext = (c: TShaderContext) => { Base.notifyOnNextFrame(() => { // Ensure pipeline is no longer in use - c.delete(); + ShaderContext.delete(c); }); } } diff --git a/armorpaint/Sources/MakeMeshPreview.ts b/armorpaint/Sources/MakeMeshPreview.ts index c4a3c386..0892ee1c 100644 --- a/armorpaint/Sources/MakeMeshPreview.ts +++ b/armorpaint/Sources/MakeMeshPreview.ts @@ -21,7 +21,7 @@ class MakeMeshPreview { let pos = "pos"; ///if arm_skin - let skin = Context.raw.paintObject.data.getVArray("bone") != null; + let skin = MeshData.getVArray(Context.raw.paintObject.data, "bone") != null; if (skin) { pos = "spos"; NodeShaderContext.add_elem(con_mesh, "bone", 'short4norm'); diff --git a/armorpaint/Sources/MakePaint.ts b/armorpaint/Sources/MakePaint.ts index ce1fdc25..58e4e4df 100644 --- a/armorpaint/Sources/MakePaint.ts +++ b/armorpaint/Sources/MakePaint.ts @@ -33,7 +33,7 @@ class MakePaint { con_paint.data.color_writes_green = [true, true, true, true]; con_paint.data.color_writes_blue = [true, true, true, true]; con_paint.data.color_writes_alpha = [true, true, true, true]; - con_paint.allow_vcols = Context.raw.paintObject.data.cols != null; + con_paint.allow_vcols = MeshData.getVArray(Context.raw.paintObject.data, 'col') != null; let vert = NodeShaderContext.make_vert(con_paint); let frag = NodeShaderContext.make_frag(con_paint); diff --git a/armorpaint/Sources/RenderPathPaint.ts b/armorpaint/Sources/RenderPathPaint.ts index c6a885ca..86dc85e4 100644 --- a/armorpaint/Sources/RenderPathPaint.ts +++ b/armorpaint/Sources/RenderPathPaint.ts @@ -345,14 +345,14 @@ class RenderPathPaint { } RenderPath.bindTarget("gbuffer0_undo", "gbuffer0_undo"); - let materialContexts: MaterialContext[] = []; - let shaderContexts: ShaderContext[] = []; + let materialContexts: TMaterialContext[] = []; + let shaderContexts: TShaderContext[] = []; let mats = Project.paintObjects[0].materials; Project.paintObjects[0].getContexts("paint", mats, materialContexts, shaderContexts); let cc_context = shaderContexts[0]; if (ConstData.screenAlignedVB == null) ConstData.createScreenAlignedData(); - RenderPath.currentG.setPipeline(cc_context.pipeState); + RenderPath.currentG.setPipeline(cc_context._pipeState); Uniforms.setContextConstants(RenderPath.currentG, cc_context, RenderPath.bindParams); Uniforms.setObjectConstants(RenderPath.currentG, cc_context, Project.paintObjects[0]); Uniforms.setMaterialConstants(RenderPath.currentG, cc_context, materialContexts[0]); @@ -520,11 +520,11 @@ class RenderPathPaint { helpMat.getInverse(Scene.camera.VP); g.setMatrix(Base.cursorInvVP, helpMat); ///if (krom_metal || krom_vulkan) - g.setVertexBuffer(geom.get([{name: "tex", data: "short2norm"}])); + g.setVertexBuffer(MeshData.get(geom, [{name: "tex", data: "short2norm"}])); ///else - g.setVertexBuffer(geom.vertexBuffer); + g.setVertexBuffer(geom._vertexBuffer); ///end - g.setIndexBuffer(geom.indexBuffers[0]); + g.setIndexBuffer(geom._indexBuffers[0]); g.drawIndexedVertices(); g.disableScissor(); @@ -834,7 +834,7 @@ class RenderPathPaint { scale_pos: 1.5, scale_tex: 1.0 }; - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { let materials = (Scene.getChild(".Plane") as MeshObject).materials; let o = Scene.addMeshObject(md, materials); o.name = ".PlaneTiled"; diff --git a/armorpaint/Sources/SlotMaterial.ts b/armorpaint/Sources/SlotMaterial.ts index 18170d89..688c3fd5 100644 --- a/armorpaint/Sources/SlotMaterial.ts +++ b/armorpaint/Sources/SlotMaterial.ts @@ -5,7 +5,7 @@ class SlotMaterialRaw { image: Image = null; imageIcon: Image = null; previewReady = false; - data: MaterialData; + data: TMaterialData; id = 0; paintBase = true; @@ -22,7 +22,7 @@ class SlotMaterialRaw { class SlotMaterial { static defaultCanvas: ArrayBuffer = null; - static create(m: MaterialData = null, c: TNodeCanvas = null): SlotMaterialRaw { + static create(m: TMaterialData = null, c: TNodeCanvas = null): SlotMaterialRaw { let raw = new SlotMaterialRaw(); for (let mat of Project.materials) if (mat.id >= raw.id) raw.id = mat.id + 1; raw.data = m; diff --git a/armorsculpt/Sources/ExportObj.ts b/armorsculpt/Sources/ExportObj.ts index c528417f..7e5dc795 100644 --- a/armorsculpt/Sources/ExportObj.ts +++ b/armorsculpt/Sources/ExportObj.ts @@ -14,7 +14,7 @@ class ExportObj { let texpaint = Project.layers[0].texpaint; let pixels = texpaint.getPixels(); let pixelsView = new DataView(pixels); - let mesh = paintObjects[0].data.raw; + let mesh = paintObjects[0].data; let inda = mesh.index_arrays[0].values; let posa = new Int16Array(inda.length * 4); @@ -30,7 +30,7 @@ class ExportObj { let p = paintObjects[0]; // let mesh = p.data.raw; let inv = 1 / 32767; - let sc = p.data.scalePos * inv; + let sc = p.data.scale_pos * inv; // let posa = mesh.vertex_arrays[0].values; let len = Math.floor(posa.length / 4); // let len = Math.floor(inda.length); diff --git a/armorsculpt/Sources/ImportMesh.ts b/armorsculpt/Sources/ImportMesh.ts index 8950fba8..8d01c1bb 100644 --- a/armorsculpt/Sources/ImportMesh.ts +++ b/armorsculpt/Sources/ImportMesh.ts @@ -35,7 +35,7 @@ class ImportMesh { static finishImport = () => { if (Context.raw.mergedObject != null) { Context.raw.mergedObject.remove(); - Data.deleteMesh(Context.raw.mergedObject.data.handle); + Data.deleteMesh(Context.raw.mergedObject.data._handle); Context.raw.mergedObject = null; } @@ -79,17 +79,17 @@ class ImportMesh { let raw = ImportMesh.rawMesh(mesh); if (mesh.cola != null) raw.vertex_arrays.push({ values: mesh.cola, attrib: "col", data: "short4norm", padding: 1 }); - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { 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.deleteMesh(p.data.handle); + Data.deleteMesh(p.data._handle); p.remove(); } - let handle = Context.raw.paintObject.data.handle; + let handle = Context.raw.paintObject.data._handle; if (handle != "SceneSphere" && handle != "ScenePlane") { Data.deleteMesh(handle); } @@ -108,8 +108,8 @@ class ImportMesh { Context.raw.paintObject.name = mesh.name; Project.paintObjects = [Context.raw.paintObject]; - md.handle = raw.name; - Data.cachedMeshes.set(md.handle, md); + md._handle = raw.name; + Data.cachedMeshes.set(md._handle, md); Context.raw.ddirty = 4; UIBase.hwnds[TabArea.TabSidebar0].redraws = 2; @@ -147,7 +147,7 @@ class ImportMesh { let raw = ImportMesh.rawMesh(mesh); if (mesh.cola != null) raw.vertex_arrays.push({ values: mesh.cola, attrib: "col", data: "short4norm", padding: 1 }); - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { let object = Scene.addMeshObject(md, Context.raw.paintObject.materials, Context.raw.paintObject); object.name = mesh.name; @@ -157,15 +157,15 @@ class ImportMesh { for (let p of Project.paintObjects) { if (p.name == object.name) { p.name += ".001"; - p.data.handle += ".001"; - Data.cachedMeshes.set(p.data.handle, p.data); + p.data._handle += ".001"; + Data.cachedMeshes.set(p.data._handle, p.data); } } Project.paintObjects.push(object); - md.handle = raw.name; - Data.cachedMeshes.set(md.handle, md); + md._handle = raw.name; + Data.cachedMeshes.set(md._handle, md); Context.raw.ddirty = 4; UIBase.hwnds[TabArea.TabSidebar0].redraws = 2; diff --git a/armorsculpt/Sources/MakeMaterial.ts b/armorsculpt/Sources/MakeMaterial.ts index 4a5feec9..598b20e6 100644 --- a/armorsculpt/Sources/MakeMaterial.ts +++ b/armorsculpt/Sources/MakeMaterial.ts @@ -1,8 +1,8 @@ class MakeMaterial { - static defaultScon: ShaderContext = null; - static defaultMcon: MaterialContext = null; + static defaultScon: TShaderContext = null; + static defaultMcon: TMaterialContext = null; static heightUsed = false; static emisUsed = false; @@ -16,10 +16,10 @@ class MakeMaterial { static parseMeshMaterial = () => { let m = Project.materials[0].data; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + for (let c of m._shader._contexts) { + if (c.name == "mesh") { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); MakeMaterial.deleteContext(c); break; } @@ -27,12 +27,12 @@ class MakeMaterial { if (MakeMesh.layerPassCount > 1) { let i = 0; - while (i < m.shader.contexts.length) { - let c = m.shader.contexts[i]; + while (i < m._shader._contexts.length) { + let c = m._shader._contexts[i]; for (let j = 1; j < MakeMesh.layerPassCount; ++j) { - if (c.raw.name == "mesh" + j) { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + if (c.name == "mesh" + j) { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); MakeMaterial.deleteContext(c); i--; break; @@ -45,9 +45,9 @@ class MakeMaterial { while (i < m.contexts.length) { let c = m.contexts[i]; for (let j = 1; j < MakeMesh.layerPassCount; ++j) { - if (c.raw.name == "mesh" + j) { - array_remove(m.raw.contexts, c.raw); + if (c.name == "mesh" + j) { array_remove(m.contexts, c); + array_remove(m._contexts, c); i--; break; } @@ -57,35 +57,38 @@ class MakeMaterial { } let con = MakeMesh.run({ name: "Material", canvas: null }); - let scon = new ShaderContext(con.data, (scon: ShaderContext) => {}); - scon.overrideContext = {}; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { scon = _scon; }); + scon._overrideContext = {}; if (con.frag.sharedSamplers.length > 0) { let sampler = con.frag.sharedSamplers[0]; - scon.overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); + scon._overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); } if (!Context.raw.textureFilter) { - scon.overrideContext.filter = "point"; + scon._overrideContext.filter = "point"; } - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); for (let i = 1; i < MakeMesh.layerPassCount; ++i) { let con = MakeMesh.run({ name: "Material", canvas: null }, i); - let scon = new ShaderContext(con.data, (scon: ShaderContext) => {}); - scon.overrideContext = {}; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { scon = _scon; }); + scon._overrideContext = {}; if (con.frag.sharedSamplers.length > 0) { let sampler = con.frag.sharedSamplers[0]; - scon.overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); + scon._overrideContext.shared_sampler = sampler.substr(sampler.lastIndexOf(" ") + 1); } if (!Context.raw.textureFilter) { - scon.overrideContext.filter = "point"; + scon._overrideContext.filter = "point"; } - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); - let mcon = new MaterialContext({ name: "mesh" + i, bind_textures: [] }, (self: MaterialContext) => {}); - m.raw.contexts.push(mcon.raw); + let mcon: TMaterialContext; + MaterialContext.create({ name: "mesh" + i, bind_textures: [] }, (self: TMaterialContext) => { mcon = self; }); m.contexts.push(mcon); + m._contexts.push(mcon); } Context.raw.ddirty = 2; @@ -97,37 +100,37 @@ class MakeMaterial { static parseParticleMaterial = () => { let m = Context.raw.particleMaterial; - let sc: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { + let sc: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "mesh") { sc = c; break; } } if (sc != null) { - array_remove(m.shader.raw.contexts, sc.raw); - array_remove(m.shader.contexts, sc); + array_remove(m._shader.contexts, sc); + array_remove(m._shader._contexts, sc); } let con = MakeParticle.run({ name: "MaterialParticle", canvas: null }); if (sc != null) MakeMaterial.deleteContext(sc); - sc = new ShaderContext(con.data, (sc: ShaderContext) => {}); - m.shader.raw.contexts.push(sc.raw); - m.shader.contexts.push(sc); + ShaderContext.create(con.data, (_sc: TShaderContext) => { sc = _sc; }); + m._shader.contexts.push(sc); + m._shader._contexts.push(sc); } static parseMeshPreviewMaterial = () => { if (!MakeMaterial.getMOut()) return; let m = Project.materials[0].data; - let scon: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "mesh") { + let scon: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "mesh") { scon = c; break; } } - array_remove(m.shader.raw.contexts, scon.raw); - array_remove(m.shader.contexts, scon); + array_remove(m._shader.contexts, scon); + array_remove(m._shader._contexts, scon); let mcon: TMaterialContext = { name: "mesh", bind_textures: [] }; @@ -135,8 +138,8 @@ class MakeMaterial { let con = MakeMeshPreview.run(sd, mcon); for (let i = 0; i < m.contexts.length; ++i) { - if (m.contexts[i].raw.name == "mesh") { - m.contexts[i] = new MaterialContext(mcon, (self: MaterialContext) => {}); + if (m.contexts[i].name == "mesh") { + MaterialContext.create(mcon, (self: TMaterialContext) => { m.contexts[i] = self; }); break; } } @@ -144,22 +147,23 @@ class MakeMaterial { if (scon != null) MakeMaterial.deleteContext(scon); let compileError = false; - scon = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon = _scon; }); if (compileError) return; - m.shader.raw.contexts.push(scon.raw); - m.shader.contexts.push(scon); + m._shader.contexts.push(scon); + m._shader._contexts.push(scon); } ///if arm_voxels - static makeVoxel = (m: MaterialData) => { + static makeVoxel = (m: TMaterialData) => { let rebuild = MakeMaterial.heightUsed; if (Config.raw.rp_gi != false && rebuild) { - let scon: ShaderContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "voxel") { + let scon: TShaderContext = null; + for (let c of m._shader._contexts) { + if (c.name == "voxel") { scon = c; break; } @@ -180,20 +184,20 @@ class MakeMaterial { } let m = Project.materials[0].data; - let scon: ShaderContext = null; - let mcon: MaterialContext = null; - for (let c of m.shader.contexts) { - if (c.raw.name == "paint") { - array_remove(m.shader.raw.contexts, c.raw); - array_remove(m.shader.contexts, c); + let scon: TShaderContext = null; + let mcon: TMaterialContext = null; + for (let c of m._shader._contexts) { + if (c.name == "paint") { + array_remove(m._shader.contexts, c); + array_remove(m._shader._contexts, c); if (c != MakeMaterial.defaultScon) MakeMaterial.deleteContext(c); break; } } for (let c of m.contexts) { - if (c.raw.name == "paint") { - array_remove(m.raw.contexts, c.raw); + if (c.name == "paint") { array_remove(m.contexts, c); + array_remove(m._contexts, c); break; } } @@ -203,18 +207,21 @@ class MakeMaterial { let con = MakeSculpt.run(sdata, mcon2); let compileError = false; - let scon2 = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + let scon2: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon2 = _scon; }); if (compileError) return; - scon2.overrideContext = {}; - scon2.overrideContext.addressing = "repeat"; - let mcon3 = new MaterialContext(mcon2, (mcon: MaterialContext) => {}); + scon2._overrideContext = {}; + scon2._overrideContext.addressing = "repeat"; + let mcon3: TMaterialContext; + MaterialContext.create(mcon2, (_mcon: TMaterialContext) => { mcon3 = _mcon; }); - m.shader.raw.contexts.push(scon2.raw); - m.shader.contexts.push(scon2); - m.raw.contexts.push(mcon3.raw); + m._shader.contexts.push(scon2); + m._shader._contexts.push(scon2); m.contexts.push(mcon3); + m._contexts.push(mcon3); if (MakeMaterial.defaultScon == null) MakeMaterial.defaultScon = scon2; if (MakeMaterial.defaultMcon == null) MakeMaterial.defaultMcon = mcon3; @@ -284,17 +291,20 @@ class MakeMaterial { } } - static parseNodePreviewMaterial = (node: TNode, group: TNodeCanvas = null, parents: TNode[] = null): { scon: ShaderContext, mcon: MaterialContext } => { + static parseNodePreviewMaterial = (node: TNode, group: TNodeCanvas = null, parents: TNode[] = null): { scon: TShaderContext, mcon: TMaterialContext } => { if (node.outputs.length == 0) return null; let sdata: TMaterial = { name: "Material", canvas: UINodes.getCanvasMaterial() }; let mcon_raw: TMaterialContext = { name: "mesh", bind_textures: [] }; let con = MakeNodePreview.run(sdata, mcon_raw, node, group, parents); let compileError = false; - let scon = new ShaderContext(con.data, (scon: ShaderContext) => { - if (scon == null) compileError = true; + let scon: TShaderContext; + ShaderContext.create(con.data, (_scon: TShaderContext) => { + if (_scon == null) compileError = true; + scon = _scon; }); if (compileError) return null; - let mcon = new MaterialContext(mcon_raw, (mcon: MaterialContext) => {}); + let mcon: TMaterialContext; + MaterialContext.create(mcon_raw, (_mcon: TMaterialContext) => { mcon = _mcon; }); return { scon: scon, mcon: mcon }; } @@ -312,9 +322,9 @@ class MakeMaterial { return `const vec3 voxelgiHalfExtents = vec3(${ext}, ${ext}, ${ext});`; } - static deleteContext = (c: ShaderContext) => { + static deleteContext = (c: TShaderContext) => { Base.notifyOnNextFrame(() => { // Ensure pipeline is no longer in use - c.delete(); + ShaderContext.delete(c); }); } } diff --git a/armorsculpt/Sources/MakeSculpt.ts b/armorsculpt/Sources/MakeSculpt.ts index b56c2104..6f18dd62 100644 --- a/armorsculpt/Sources/MakeSculpt.ts +++ b/armorsculpt/Sources/MakeSculpt.ts @@ -17,7 +17,7 @@ class MakeSculpt { con_paint.data.color_writes_green = [true, true, true, true]; con_paint.data.color_writes_blue = [true, true, true, true]; con_paint.data.color_writes_alpha = [true, true, true, true]; - con_paint.allow_vcols = Context.raw.paintObject.data.cols != null; + con_paint.allow_vcols = MeshData.getVArray(Context.raw.paintObject.data, "col") != null; let vert = NodeShaderContext.make_vert(con_paint); let frag = NodeShaderContext.make_frag(con_paint); diff --git a/base/Sources/BoxExport.ts b/base/Sources/BoxExport.ts index 8cb9f879..04c56ace 100644 --- a/base/Sources/BoxExport.ts +++ b/base/Sources/BoxExport.ts @@ -337,7 +337,7 @@ class BoxExport { let pos = BoxExport.exportMeshHandle.position; let paintObjects = pos == 0 ? Project.paintObjects : [Project.paintObjects[pos - 1]]; for (let po of paintObjects) { - for (let inda of po.data.raw.index_arrays) { + for (let inda of po.data.index_arrays) { tris += Math.floor(inda.values.length / 3); } } diff --git a/base/Sources/BoxPreferences.ts b/base/Sources/BoxPreferences.ts index be4ada6d..9a112aa6 100644 --- a/base/Sources/BoxPreferences.ts +++ b/base/Sources/BoxPreferences.ts @@ -206,7 +206,7 @@ class BoxPreferences { Context.raw.emptyEnvmap = Image.fromBytes(b.buffer, 1, 1); Context.raw.ddirty = 2; if (!Context.raw.showEnvmap) { - Scene.world.envmap = Context.raw.emptyEnvmap; + Scene.world._envmap = Context.raw.emptyEnvmap; } } diff --git a/base/Sources/Context.ts b/base/Sources/Context.ts index 03fe68bd..40293637 100644 --- a/base/Sources/Context.ts +++ b/base/Sources/Context.ts @@ -276,16 +276,16 @@ class Context { Context.raw.envmapLoaded = true; Data.cachedImages.delete("World_radiance.k"); } - Scene.world.loadEnvmap((_) => {}); - if (Context.raw.savedEnvmap == null) Context.raw.savedEnvmap = Scene.world.envmap; + WorldData.loadEnvmap(Scene.world, (_) => {}); + if (Context.raw.savedEnvmap == null) Context.raw.savedEnvmap = Scene.world._envmap; } static updateEnvmap = () => { if (Context.raw.showEnvmap) { - Scene.world.envmap = Context.raw.showEnvmapBlur ? Scene.world.radianceMipmaps[0] : Context.raw.savedEnvmap; + Scene.world._envmap = Context.raw.showEnvmapBlur ? Scene.world._radianceMipmaps[0] : Context.raw.savedEnvmap; } else { - Scene.world.envmap = Context.raw.emptyEnvmap; + Scene.world._envmap = Context.raw.emptyEnvmap; } } diff --git a/base/Sources/ContextFormat.ts b/base/Sources/ContextFormat.ts index ec0e40ba..c9c5ec42 100644 --- a/base/Sources/ContextFormat.ts +++ b/base/Sources/ContextFormat.ts @@ -168,7 +168,7 @@ class TContext { textToolImage?: Image = null; textToolText?: string; - particleMaterial?: MaterialData = null; + particleMaterial?: TMaterialData = null; ///if arm_physics particlePhysics? = false; particleHitX? = 0.0; diff --git a/base/Sources/ExportArm.ts b/base/Sources/ExportArm.ts index 1828f4c3..82db4356 100644 --- a/base/Sources/ExportArm.ts +++ b/base/Sources/ExportArm.ts @@ -3,7 +3,7 @@ class ExportArm { static runMesh = (path: string, paintObjects: MeshObject[]) => { let mesh_datas: TMeshData[] = []; - for (let p of paintObjects) mesh_datas.push(p.data.raw); + for (let p of paintObjects) mesh_datas.push(p.data); let raw: TSceneFormat = { mesh_datas: mesh_datas }; let b = ArmPack.encode(raw); if (!path.endsWith(".arm")) path += ".arm"; @@ -40,11 +40,11 @@ class ExportArm { ///if (is_paint || is_sculpt) let md: TMeshData[] = []; - for (let p of Project.paintObjects) md.push(p.data.raw); + for (let p of Project.paintObjects) md.push(p.data); ///end ///if is_lab - let md = Project.paintObjects[0].data.raw; + let md = Project.paintObjects[0].data; ///end let texture_files = ExportArm.assetsToFiles(Project.filepath, Project.assets); @@ -106,7 +106,7 @@ class ExportArm { packed_assets: packed_assets, swatches: Project.raw.swatches, envmap: Project.raw.envmap != null ? (sameDrive ? Path.toRelative(Project.filepath, Project.raw.envmap) : Project.raw.envmap) : null, - envmap_strength: Scene.world.raw.strength, + envmap_strength: Scene.world.strength, camera_world: Scene.camera.transform.local.toFloat32Array(), camera_origin: ExportArm.vec3f32(Camera.origins[0]), camera_fov: Scene.camera.data.fov, diff --git a/base/Sources/ExportObj.ts b/base/Sources/ExportObj.ts index e66083b9..dde2e2bd 100644 --- a/base/Sources/ExportObj.ts +++ b/base/Sources/ExportObj.ts @@ -15,9 +15,9 @@ class ExportObj { let noff = 0; let toff = 0; for (let p of paintObjects) { - let mesh = p.data.raw; + let mesh = p.data; let inv = 1 / 32767; - let sc = p.data.scalePos * inv; + let sc = p.data.scale_pos * inv; let posa = mesh.vertex_arrays[0].values; let nora = mesh.vertex_arrays[1].values; let texa = mesh.vertex_arrays[2].values; diff --git a/base/Sources/ImportArm.ts b/base/Sources/ImportArm.ts index 738d1382..5b23a314 100644 --- a/base/Sources/ImportArm.ts +++ b/base/Sources/ImportArm.ts @@ -75,7 +75,7 @@ class ImportArm { Project.raw.envmap = Data.isAbsolute(Project.raw.envmap) ? Project.raw.envmap : base + Project.raw.envmap; } if (Project.raw.envmap_strength != null) { - Scene.world.raw.strength = Project.raw.envmap_strength; + Scene.world.strength = Project.raw.envmap_strength; } if (Project.raw.camera_world != null) { Scene.camera.transform.local = Mat4.fromFloat32Array(Project.raw.camera_world); @@ -126,11 +126,11 @@ class ImportArm { // Synchronous for now ///if (is_paint || is_sculpt) - new MeshData(project.mesh_datas[0], (md: MeshData) => { + MeshData.create(project.mesh_datas[0], (md: TMeshData) => { ///end ///if is_lab - new MeshData(project.mesh_data, (md: MeshData) => { + MeshData.create(project.mesh_data, (md: TMeshData) => { ///end Context.raw.paintObject.setData(md); @@ -143,7 +143,7 @@ class ImportArm { ///if (is_paint || is_sculpt) for (let i = 1; i < project.mesh_datas.length; ++i) { let raw = project.mesh_datas[i]; - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { let object = Scene.addMeshObject(md, Context.raw.paintObject.materials, Context.raw.paintObject); object.name = md.name; object.skip_context = "paint"; @@ -299,8 +299,8 @@ class ImportArm { Context.setLayer(Project.layers[0]); // Materials - let m0: MaterialData = null; - Data.getMaterial("Scene", "Material", (m: MaterialData) => { + let m0: TMaterialData = null; + Data.getMaterial("Scene", "Material", (m: TMaterialData) => { m0 = m; }); @@ -364,7 +364,7 @@ class ImportArm { static runMesh = (raw: TSceneFormat) => { Project.paintObjects = []; for (let i = 0; i < raw.mesh_datas.length; ++i) { - new MeshData(raw.mesh_datas[i], (md: MeshData) => { + MeshData.create(raw.mesh_datas[i], (md: TMeshData) => { let object: MeshObject = null; if (i == 0) { Context.raw.paintObject.setData(md); @@ -374,8 +374,8 @@ class ImportArm { object = Scene.addMeshObject(md, Context.raw.paintObject.materials, Context.raw.paintObject); object.name = md.name; object.skip_context = "paint"; - md.handle = md.name; - Data.cachedMeshes.set(md.handle, md); + md._handle = md.name; + Data.cachedMeshes.set(md._handle, md); } object.transform.scale.set(1, 1, 1); object.transform.buildMatrix(); @@ -417,8 +417,8 @@ class ImportArm { ImportTexture.run(abs); } - let m0: MaterialData = null; - Data.getMaterial("Scene", "Material", (m: MaterialData) => { + let m0: TMaterialData = null; + Data.getMaterial("Scene", "Material", (m: TMaterialData) => { m0 = m; }); diff --git a/base/Sources/ImportEnvmap.ts b/base/Sources/ImportEnvmap.ts index 18160719..af7c09fd 100644 --- a/base/Sources/ImportEnvmap.ts +++ b/base/Sources/ImportEnvmap.ts @@ -74,18 +74,18 @@ class ImportEnvmap { ImportEnvmap.radianceCpu.setMipmaps(ImportEnvmap.mipsCpu); // Irradiance - Scene.world.irradiance = ImportEnvmap.getSphericalHarmonics(radiancePixels, ImportEnvmap.radiance.width, ImportEnvmap.radiance.height); + Scene.world._irradiance = ImportEnvmap.getSphericalHarmonics(radiancePixels, ImportEnvmap.radiance.width, ImportEnvmap.radiance.height); // World - Scene.world.raw.strength = 1.0; - Scene.world.raw.radiance_mipmaps = ImportEnvmap.mipsCpu.length - 2; - Scene.world.envmap = image; - Scene.world.raw.envmap = path; - Scene.world.radiance = ImportEnvmap.radianceCpu; - Scene.world.radianceMipmaps = ImportEnvmap.mipsCpu; + Scene.world.strength = 1.0; + Scene.world.radiance_mipmaps = ImportEnvmap.mipsCpu.length - 2; + Scene.world._envmap = image; + Scene.world.envmap = path; + Scene.world._radiance = ImportEnvmap.radianceCpu; + Scene.world._radianceMipmaps = ImportEnvmap.mipsCpu; Context.raw.savedEnvmap = image; if (Context.raw.showEnvmapBlur) { - Scene.world.envmap = Scene.world.radianceMipmaps[0]; + Scene.world._envmap = Scene.world._radianceMipmaps[0]; } Context.raw.ddirty = 2; Project.raw.envmap = path; diff --git a/base/Sources/ImportMesh.ts b/base/Sources/ImportMesh.ts index a0d20c89..75ec587c 100644 --- a/base/Sources/ImportMesh.ts +++ b/base/Sources/ImportMesh.ts @@ -61,7 +61,7 @@ class ImportMesh { static finishImport = () => { if (Context.raw.mergedObject != null) { - Context.raw.mergedObject.data.delete(); + MeshData.delete(Context.raw.mergedObject.data); Context.raw.mergedObject.remove(); Context.raw.mergedObject = null; } @@ -106,17 +106,17 @@ class ImportMesh { let raw = ImportMesh.rawMesh(mesh); if (mesh.cola != null) raw.vertex_arrays.push({ values: mesh.cola, attrib: "col", data: "short4norm", padding: 1 }); - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { 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.deleteMesh(p.data.handle); + Data.deleteMesh(p.data._handle); p.remove(); } - let handle = Context.raw.paintObject.data.handle; + let handle = Context.raw.paintObject.data._handle; if (handle != "SceneSphere" && handle != "ScenePlane") { Data.deleteMesh(handle); } @@ -125,8 +125,8 @@ class ImportMesh { Context.raw.paintObject.name = mesh.name; Project.paintObjects = [Context.raw.paintObject]; - md.handle = raw.name; - Data.cachedMeshes.set(md.handle, md); + md._handle = raw.name; + Data.cachedMeshes.set(md._handle, md); Context.raw.ddirty = 4; @@ -185,7 +185,7 @@ class ImportMesh { let raw = ImportMesh.rawMesh(mesh); if (mesh.cola != null) raw.vertex_arrays.push({ values: mesh.cola, attrib: "col", data: "short4norm", padding: 1 }); - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { let object = Scene.addMeshObject(md, Context.raw.paintObject.materials, Context.raw.paintObject); object.name = mesh.name; @@ -195,15 +195,15 @@ class ImportMesh { for (let p of Project.paintObjects) { if (p.name == object.name) { p.name += ".001"; - p.data.handle += ".001"; - Data.cachedMeshes.set(p.data.handle, p.data); + p.data._handle += ".001"; + Data.cachedMeshes.set(p.data._handle, p.data); } } Project.paintObjects.push(object); - md.handle = raw.name; - Data.cachedMeshes.set(md.handle, md); + md._handle = raw.name; + Data.cachedMeshes.set(md._handle, md); Context.raw.ddirty = 4; diff --git a/base/Sources/MakeVoxel.ts b/base/Sources/MakeVoxel.ts index fdafdd87..258a842d 100644 --- a/base/Sources/MakeVoxel.ts +++ b/base/Sources/MakeVoxel.ts @@ -2,15 +2,15 @@ class MakeVoxel { ///if arm_voxels - static run = (data: ShaderContext) => { + static run = (data: TShaderContext) => { let structure = new VertexStructure(); structure.add("pos", VertexData.I16_4X_Normalized); structure.add("nor", VertexData.I16_2X_Normalized); structure.add("tex", VertexData.I16_2X_Normalized); - let pipeState = data.pipeState; + let pipeState = data._pipeState; pipeState.inputLayout = [structure]; - data.raw.vertex_elements = [{name: "pos", data: "short4norm"}, {name: "nor", data: "short2norm"}, {name: "tex", data: "short2norm"}]; + data.vertex_elements = [{name: "pos", data: "short4norm"}, {name: "nor", data: "short2norm"}, {name: "tex", data: "short2norm"}]; // ///if arm_skin // let isMesh = Context.raw.object.constructor == MeshObject; @@ -27,10 +27,10 @@ class MakeVoxel { pipeState.vertexShader = Shader.fromSource(MakeVoxel.voxelSource(), ShaderType.Vertex); pipeState.compile(); - data.raw.constants = [{ name: "W", type: "mat4", link: "_worldMatrix" }, { name: "N", type: "mat3", link: "_normalMatrix" }]; - data.constants = [pipeState.getConstantLocation("W"), pipeState.getConstantLocation("N")]; - data.raw.texture_units = [{ name: "texpaint_pack" }, { name: "voxels", is_image: true }]; - data.textureUnits = [pipeState.getTextureUnit("texpaint_pack"), pipeState.getTextureUnit("voxels")]; + data.constants = [{ name: "W", type: "mat4", link: "_worldMatrix" }, { name: "N", type: "mat3", link: "_normalMatrix" }]; + data._constants = [pipeState.getConstantLocation("W"), pipeState.getConstantLocation("N")]; + data.texture_units = [{ name: "texpaint_pack" }, { name: "voxels", is_image: true }]; + data._textureUnits = [pipeState.getTextureUnit("texpaint_pack"), pipeState.getTextureUnit("voxels")]; } static voxelSource = (): string => { diff --git a/base/Sources/PhysicsBody.ts b/base/Sources/PhysicsBody.ts index 9290ed4d..dd45bf46 100644 --- a/base/Sources/PhysicsBody.ts +++ b/base/Sources/PhysicsBody.ts @@ -64,9 +64,9 @@ class PhysicsBody { static trans2: Ammo.btTransform; static quat = new Quat(); - static convexHullCache = new Map(); - static triangleMeshCache = new Map(); - static usersCache = new Map(); + static convexHullCache = new Map(); + static triangleMeshCache = new Map(); + static usersCache = new Map(); static create(): PhysicsBodyRaw { if (PhysicsBody.first) { @@ -365,17 +365,15 @@ class PhysicsBody { PhysicsBody.convexHullCache.set(data, shape); PhysicsBody.usersCache.set(data, 1); - let positions = data.positions.values; + let positions = MeshData.getVArray(data, 'pos').values; let sx: f32 = scale.x * (1.0 - margin) * (1 / 32767); let sy: f32 = scale.y * (1.0 - margin) * (1 / 32767); let sz: f32 = scale.z * (1.0 - margin) * (1 / 32767); - if (data.raw.scale_pos != null) { - sx *= data.raw.scale_pos; - sy *= data.raw.scale_pos; - sz *= data.raw.scale_pos; - } + sx *= data.scale_pos; + sy *= data.scale_pos; + sz *= data.scale_pos; for (let i = 0; i < Math.floor(positions.length / 4); ++i) { PhysicsBody.vec1.setX(positions[i * 4 ] * sx); @@ -399,18 +397,16 @@ class PhysicsBody { PhysicsBody.triangleMeshCache.set(data, triangleMesh); PhysicsBody.usersCache.set(data, 1); - let positions = data.positions.values; - let indices = data.indices; + let positions = MeshData.getVArray(data, 'pos').values; + let indices = data._indices; let sx: f32 = scale.x * (1 / 32767); let sy: f32 = scale.y * (1 / 32767); let sz: f32 = scale.z * (1 / 32767); - if (data.raw.scale_pos != null) { - sx *= data.raw.scale_pos; - sy *= data.raw.scale_pos; - sz *= data.raw.scale_pos; - } + sx *= data.scale_pos; + sy *= data.scale_pos; + sz *= data.scale_pos; for (let ar of indices) { for (let i = 0; i < Math.floor(ar.length / 3); ++i) { diff --git a/base/Sources/Project.ts b/base/Sources/Project.ts index eb3b1c22..fb3c095d 100644 --- a/base/Sources/Project.ts +++ b/base/Sources/Project.ts @@ -20,7 +20,7 @@ class Project { static atlasNames: string[] = null; ///end ///if is_lab - static materialData: MaterialData = null; //// + static materialData: TMaterialData = null; //// static materials: any[] = null; //// static nodes: Nodes; static canvas: TNodeCanvas; @@ -124,7 +124,7 @@ class Project { ///if (is_paint || is_sculpt) if (Context.raw.mergedObject != null) { Context.raw.mergedObject.remove(); - Data.deleteMesh(Context.raw.mergedObject.data.handle); + Data.deleteMesh(Context.raw.mergedObject.data._handle); Context.raw.mergedObject = null; } Context.raw.layerPreviewDirty = true; @@ -139,7 +139,7 @@ class Project { for (let i = 1; i < Project.paintObjects.length; ++i) { let p = Project.paintObjects[i]; if (p == Context.raw.paintObject) continue; - Data.deleteMesh(p.data.handle); + Data.deleteMesh(p.data._handle); p.remove(); } let meshes = Scene.meshes; @@ -149,11 +149,11 @@ class Project { if (Context.raw.projectObjects.indexOf(m) == -1 && m.name != ".ParticleEmitter" && m.name != ".Particle") { - Data.deleteMesh(m.data.handle); + Data.deleteMesh(m.data._handle); m.remove(); } } - let handle = Context.raw.paintObject.data.handle; + let handle = Context.raw.paintObject.data._handle; if (handle != "SceneSphere" && handle != "ScenePlane") { Data.deleteMesh(handle); } @@ -194,7 +194,8 @@ class Project { }); } - let md = new MeshData(raw, (md: MeshData) => {}); + let md: TMeshData; + MeshData.create(raw, (mdata: TMeshData) => { md = mdata; }); Data.cachedMeshes.set("SceneTessellated", md); if (Context.raw.projectType == ProjectModel.ModelTessellatedPlane) { @@ -203,7 +204,7 @@ class Project { } let n = Context.raw.projectType == ProjectModel.ModelRoundedCube ? ".Cube" : "Tessellated"; - Data.getMesh("Scene", n, (md: MeshData) => { + Data.getMesh("Scene", n, (md: TMeshData) => { let current = Graphics2.current; if (current != null) current.end(); @@ -220,7 +221,7 @@ class Project { ///if (is_paint || is_sculpt) while (Project.materials.length > 0) SlotMaterial.unload(Project.materials.pop()); ///end - Data.getMaterial("Scene", "Material", (m: MaterialData) => { + Data.getMaterial("Scene", "Material", (m: TMaterialData) => { ///if (is_paint || is_sculpt) Project.materials.push(SlotMaterial.create(m)); ///end @@ -291,13 +292,13 @@ class Project { Context.raw.savedEnvmap = null; Context.raw.envmapLoaded = false; - Scene.world.envmap = Context.raw.emptyEnvmap; - Scene.world.raw.envmap = "World_radiance.k"; + Scene.world._envmap = Context.raw.emptyEnvmap; + Scene.world.envmap = "World_radiance.k"; Context.raw.showEnvmapHandle.selected = Context.raw.showEnvmap = false; - Scene.world.radiance = Context.raw.defaultRadiance; - Scene.world.radianceMipmaps = Context.raw.defaultRadianceMipmaps; - Scene.world.irradiance = Context.raw.defaultIrradiance; - Scene.world.raw.strength = 4.0; + Scene.world._radiance = Context.raw.defaultRadiance; + Scene.world._radianceMipmaps = Context.raw.defaultRadianceMipmaps; + Scene.world._irradiance = Context.raw.defaultIrradiance; + Scene.world.strength = 4.0; ///if (is_paint || is_sculpt) Context.initTool(); diff --git a/base/Sources/RenderPathRaytrace.ts b/base/Sources/RenderPathRaytrace.ts index fda09d5f..e3cda320 100644 --- a/base/Sources/RenderPathRaytrace.ts +++ b/base/Sources/RenderPathRaytrace.ts @@ -47,7 +47,7 @@ class RenderPathRaytrace { } let probe = Scene.world; - let savedEnvmap = Context.raw.showEnvmapBlur ? probe.radianceMipmaps[0] : Context.raw.savedEnvmap; + let savedEnvmap = Context.raw.showEnvmapBlur ? probe._radianceMipmaps[0] : Context.raw.savedEnvmap; if (RenderPathRaytrace.lastEnvmap != savedEnvmap) { RenderPathRaytrace.lastEnvmap = savedEnvmap; @@ -109,12 +109,12 @@ class RenderPathRaytrace { RenderPathRaytrace.f32a[17] = RenderPathRaytrace.helpMat._31; RenderPathRaytrace.f32a[18] = RenderPathRaytrace.helpMat._32; RenderPathRaytrace.f32a[19] = RenderPathRaytrace.helpMat._33; - RenderPathRaytrace.f32a[20] = Scene.world.raw.strength * 1.5; + RenderPathRaytrace.f32a[20] = Scene.world.strength * 1.5; if (!Context.raw.showEnvmap) RenderPathRaytrace.f32a[20] = -RenderPathRaytrace.f32a[20]; RenderPathRaytrace.f32a[21] = Context.raw.envmapAngle; RenderPathRaytrace.f32a[22] = RenderPathRaytrace.uvScale; ///if is_lab - RenderPathRaytrace.f32a[22] *= Scene.meshes[0].data.scaleTex; + RenderPathRaytrace.f32a[22] *= Scene.meshes[0].data.scale_tex; ///end let framebuffer = RenderPath.renderTargets.get("buf").image; @@ -160,10 +160,10 @@ class RenderPathRaytrace { ///end let md = mo.data; let mo_scale = mo.transform.scale.x; // Uniform scale only - RenderPathRaytrace.vb_scale = md.scalePos * mo_scale; + RenderPathRaytrace.vb_scale = md.scale_pos * mo_scale; if (mo.parent != null) RenderPathRaytrace.vb_scale *= mo.parent.transform.scale.x; - RenderPathRaytrace.vb = md.vertexBuffer; - RenderPathRaytrace.ib = md.indexBuffers[0]; + RenderPathRaytrace.vb = md._vertexBuffer; + RenderPathRaytrace.ib = md._indexBuffers[0]; } static draw = (useLiveLayer: bool) => { diff --git a/base/Sources/RenderPathRaytraceBake.ts b/base/Sources/RenderPathRaytraceBake.ts index 6b0968bc..0774a5de 100644 --- a/base/Sources/RenderPathRaytraceBake.ts +++ b/base/Sources/RenderPathRaytraceBake.ts @@ -75,7 +75,7 @@ class RenderPathRaytraceBake { Context.updateEnvmap(); } let probe = Scene.world; - let savedEnvmap = Context.raw.showEnvmapBlur ? probe.radianceMipmaps[0] : Context.raw.savedEnvmap; + let savedEnvmap = Context.raw.showEnvmapBlur ? probe._radianceMipmaps[0] : Context.raw.savedEnvmap; if (RenderPathRaytrace.lastEnvmap != savedEnvmap || RenderPathRaytraceBake.lastLayer != Context.raw.layer.texpaint) { RenderPathRaytrace.lastEnvmap = savedEnvmap; RenderPathRaytraceBake.lastLayer = Context.raw.layer.texpaint; @@ -100,7 +100,7 @@ class RenderPathRaytraceBake { f32a[1] = Context.raw.bakeAoStrength; f32a[2] = Context.raw.bakeAoRadius; f32a[3] = Context.raw.bakeAoOffset; - f32a[4] = Scene.world.raw.strength; + f32a[4] = Scene.world.strength; f32a[5] = Context.raw.bakeUpAxis; f32a[6] = Context.raw.envmapAngle; diff --git a/base/Sources/TabMeshes.ts b/base/Sources/TabMeshes.ts index cface837..e70114d7 100644 --- a/base/Sources/TabMeshes.ts +++ b/base/Sources/TabMeshes.ts @@ -72,7 +72,7 @@ class TabMeshes { ///end ///if is_lab let displace_strength = Config.raw.displace_strength > 0 ? Config.raw.displace_strength : 1.0; - let uv_scale = Scene.meshes[0].data.scaleTex * Context.raw.brushScale; + let uv_scale = Scene.meshes[0].data.scale_tex * Context.raw.brushScale; UtilMesh.applyDisplacement(BrushOutputNode.inst.texpaint_pack, 0.05 * displace_strength, uv_scale); ///end @@ -125,7 +125,7 @@ class TabMeshes { Project.paintObjects[0].transform.buildMatrix(); } } - Data.deleteMesh(o.data.handle); + Data.deleteMesh(o.data._handle); o.remove(); Context.raw.paintObject = Context.mainObject(); UtilMesh.mergeMesh(); @@ -162,7 +162,8 @@ class TabMeshes { scale_pos: mesh.scalePos, scale_tex: mesh.scaleTex }; - let md = new MeshData(raw, (md: MeshData) => {}); + let md: TMeshData; + MeshData.create(raw, (_md: TMeshData) => { md = _md; }); mo = new MeshObject(md, Context.raw.paintObject.materials); array_remove(Scene.meshes, mo); mo.name = "Tessellated"; diff --git a/base/Sources/UIBase.ts b/base/Sources/UIBase.ts index 2b781770..ca689b55 100644 --- a/base/Sources/UIBase.ts +++ b/base/Sources/UIBase.ts @@ -121,7 +121,7 @@ class UIBase { ///if (is_paint || is_sculpt) if (Project.materials == null) { Project.materials = []; - Data.getMaterial("Scene", "Material", (m: MaterialData) => { + Data.getMaterial("Scene", "Material", (m: TMaterialData) => { Project.materials.push(SlotMaterial.create(m)); Context.raw.material = Project.materials[0]; }); @@ -149,7 +149,7 @@ class UIBase { ///if is_lab if (Project.materialData == null) { - Data.getMaterial("Scene", "Material", (m: MaterialData) => { + Data.getMaterial("Scene", "Material", (m: TMaterialData) => { Project.materialData = m; }); } @@ -193,12 +193,12 @@ class UIBase { let world = Scene.world; if (Context.raw.savedEnvmap == null) { - // Context.raw.savedEnvmap = world.envmap; - Context.raw.defaultIrradiance = world.irradiance; - Context.raw.defaultRadiance = world.radiance; - Context.raw.defaultRadianceMipmaps = world.radianceMipmaps; + // Context.raw.savedEnvmap = world._envmap; + Context.raw.defaultIrradiance = world._irradiance; + Context.raw.defaultRadiance = world._radiance; + Context.raw.defaultRadianceMipmaps = world._radianceMipmaps; } - world.envmap = Context.raw.showEnvmap ? Context.raw.savedEnvmap : Context.raw.emptyEnvmap; + world._envmap = Context.raw.showEnvmap ? Context.raw.savedEnvmap : Context.raw.emptyEnvmap; Context.raw.ddirty = 1; History.reset(); @@ -711,7 +711,7 @@ class UIBase { History.pushUndo = true; Context.raw.particleHitX = Context.raw.particleHitY = Context.raw.particleHitZ = 0; Scene.spawnObject(".Sphere", null, (o: Object) => { - Data.getMaterial("Scene", ".Gizmo", (md: MaterialData) => { + Data.getMaterial("Scene", ".Gizmo", (md: TMaterialData) => { let mo: MeshObject = o as MeshObject; mo.name = ".Bullet"; mo.materials[0] = md; diff --git a/base/Sources/UIMenu.ts b/base/Sources/UIMenu.ts index 3799962b..f6f1a38f 100644 --- a/base/Sources/UIMenu.ts +++ b/base/Sources/UIMenu.ts @@ -122,9 +122,9 @@ class UIMenu { UIMenu.menuFill(ui); let p = Scene.world; let envHandle = Zui.handle("uimenu_0"); - envHandle.value = p.raw.strength; + envHandle.value = p.strength; UIMenu.menuAlign(ui); - p.raw.strength = ui.slider(envHandle, tr("Environment"), 0.0, 8.0, true); + p.strength = ui.slider(envHandle, tr("Environment"), 0.0, 8.0, true); if (envHandle.changed) Context.raw.ddirty = 2; UIMenu.menuFill(ui); diff --git a/base/Sources/UIMenubar.ts b/base/Sources/UIMenubar.ts index 16edcad5..cdafb337 100644 --- a/base/Sources/UIMenubar.ts +++ b/base/Sources/UIMenubar.ts @@ -136,7 +136,8 @@ class UIMenubar { scale_pos: mesh.scalePos, scale_tex: mesh.scaleTex }; - let md = new MeshData(raw, (md: MeshData) => {}); + let md: TMeshData; + MeshData.create(raw, (_md: TMeshData) => { md = _md; }); let dotPlane: MeshObject = Scene.getChild(".Plane") as MeshObject; UIMenubar._plane = new MeshObject(md, dotPlane.materials); array_remove(Scene.meshes, UIMenubar._plane); diff --git a/base/Sources/UniformsExt.ts b/base/Sources/UniformsExt.ts index ed0f2053..ec303c40 100644 --- a/base/Sources/UniformsExt.ts +++ b/base/Sources/UniformsExt.ts @@ -14,11 +14,11 @@ class UniformsExt { Uniforms.externalTextureLinks = [UniformsExt.linkTex]; } - static linkInt = (object: BaseObject, mat: MaterialData, link: string): Null => { + static linkInt = (object: BaseObject, mat: TMaterialData, link: string): Null => { return null; } - static linkFloat = (object: BaseObject, mat: MaterialData, link: string): Null => { + static linkFloat = (object: BaseObject, mat: TMaterialData, link: string): Null => { switch (link) { case "_brushRadius": { ///if (is_paint || is_sculpt) @@ -148,7 +148,7 @@ class UniformsExt { return null; } - static linkVec2 = (object: BaseObject, mat: MaterialData, link: string): Vec4 => { + static linkVec2 = (object: BaseObject, mat: TMaterialData, link: string): Vec4 => { switch (link) { case "_gbufferSize": { UniformsExt.vec.set(0, 0, 0); @@ -180,7 +180,7 @@ class UniformsExt { return null; } - static linkVec3 = (object: BaseObject, mat: MaterialData, link: string): Vec4 => { + static linkVec3 = (object: BaseObject, mat: TMaterialData, link: string): Vec4 => { let v: Vec4 = null; switch (link) { ///if (is_paint || is_sculpt) @@ -261,7 +261,7 @@ class UniformsExt { } ///end - static linkVec4 = (object: BaseObject, mat: MaterialData, link: string): Vec4 => { + static linkVec4 = (object: BaseObject, mat: TMaterialData, link: string): Vec4 => { switch (link) { case "_inputBrush": { let down = Mouse.down() || Pen.down(); @@ -288,11 +288,11 @@ class UniformsExt { return UniformsExt.vec; } case "_envmapData": { - UniformsExt.vec.set(Context.raw.envmapAngle, Math.sin(-Context.raw.envmapAngle), Math.cos(-Context.raw.envmapAngle), Scene.world.raw.strength); + UniformsExt.vec.set(Context.raw.envmapAngle, Math.sin(-Context.raw.envmapAngle), Math.cos(-Context.raw.envmapAngle), Scene.world.strength); return UniformsExt.vec; } case "_envmapDataWorld": { - UniformsExt.vec.set(Context.raw.envmapAngle, Math.sin(-Context.raw.envmapAngle), Math.cos(-Context.raw.envmapAngle), Context.raw.showEnvmap ? Scene.world.raw.strength : 1.0); + UniformsExt.vec.set(Context.raw.envmapAngle, Math.sin(-Context.raw.envmapAngle), Math.cos(-Context.raw.envmapAngle), Context.raw.showEnvmap ? Scene.world.strength : 1.0); return UniformsExt.vec; } ///if (is_paint || is_sculpt) @@ -316,7 +316,7 @@ class UniformsExt { return null; } - static linkMat4 = (object: BaseObject, mat: MaterialData, link: string): Mat4 => { + static linkMat4 = (object: BaseObject, mat: TMaterialData, link: string): Mat4 => { switch (link) { ///if (is_paint || is_sculpt) case "_decalLayerMatrix": { // Decal layer @@ -332,7 +332,7 @@ class UniformsExt { return null; } - static linkTex = (object: BaseObject, mat: MaterialData, link: string): Image => { + static linkTex = (object: BaseObject, mat: TMaterialData, link: string): Image => { switch (link) { case "_texpaint_undo": { ///if (is_paint || is_sculpt) diff --git a/base/Sources/UtilMesh.ts b/base/Sources/UtilMesh.ts index 79678044..15be18fc 100644 --- a/base/Sources/UtilMesh.ts +++ b/base/Sources/UtilMesh.ts @@ -11,23 +11,23 @@ class UtilMesh { let ilen = 0; let maxScale = 0.0; for (let i = 0; i < paintObjects.length; ++i) { - vlen += paintObjects[i].data.raw.vertex_arrays[0].values.length; - ilen += paintObjects[i].data.raw.index_arrays[0].values.length; - if (paintObjects[i].data.scalePos > maxScale) maxScale = paintObjects[i].data.scalePos; + vlen += paintObjects[i].data.vertex_arrays[0].values.length; + ilen += paintObjects[i].data.index_arrays[0].values.length; + if (paintObjects[i].data.scale_pos > maxScale) maxScale = paintObjects[i].data.scale_pos; } vlen = Math.floor(vlen / 4); let va0 = new Int16Array(vlen * 4); let va1 = new Int16Array(vlen * 2); let va2 = new Int16Array(vlen * 2); - let va3 = paintObjects[0].data.raw.vertex_arrays.length > 3 ? new Int16Array(vlen * 3) : null; // +1 padding + let va3 = paintObjects[0].data.vertex_arrays.length > 3 ? new Int16Array(vlen * 3) : null; // +1 padding let ia = new Uint32Array(ilen); let voff = 0; let ioff = 0; for (let i = 0; i < paintObjects.length; ++i) { - let vas = paintObjects[i].data.raw.vertex_arrays; - let ias = paintObjects[i].data.raw.index_arrays; - let scale = paintObjects[i].data.scalePos; + let vas = paintObjects[i].data.vertex_arrays; + let ias = paintObjects[i].data.index_arrays; + let scale = paintObjects[i].data.scale_pos; // Pos for (let j = 0; j < vas[0].values.length; ++j) va0[j + voff * 4] = vas[0].values[j]; @@ -76,7 +76,7 @@ class UtilMesh { if (va3 != null) raw.vertex_arrays.push({ values: va3, attrib: "col", data: "short4norm", padding: 1 }); UtilMesh.removeMergedMesh(); - new MeshData(raw, (md: MeshData) => { + MeshData.create(raw, (md: TMeshData) => { Context.raw.mergedObject = new MeshObject(md, Context.raw.paintObject.materials); Context.raw.mergedObject.name = Context.raw.paintObject.name + "_merged"; Context.raw.mergedObject.force_context = "paint"; @@ -90,7 +90,7 @@ class UtilMesh { static removeMergedMesh = () => { if (Context.raw.mergedObject != null) { - Context.raw.mergedObject.data.delete(); + MeshData.delete(Context.raw.mergedObject.data); Context.raw.mergedObject.remove(); Context.raw.mergedObject = null; } @@ -101,7 +101,7 @@ class UtilMesh { for (let o of objects) { // Remapping vertices, buckle up // 0 - x, 1 - y, 2 - z - let vas = o.data.raw.vertex_arrays; + let vas = o.data.vertex_arrays; let pa = vas[0].values; let na0 = a == 2 ? vas[0].values : vas[1].values; let na1 = b == 2 ? vas[0].values : vas[1].values; @@ -120,8 +120,8 @@ class UtilMesh { } let g = o.data; - let l = g.structLength; - let vertices = g.vertexBuffer.lock(); // posnortex + let l = g._struct.byteSize() / 2; + let vertices = g._vertexBuffer.lock(); // posnortex for (let i = 0; i < Math.floor(vertices.byteLength / 2 / l); ++i) { vertices.setInt16((i * l ) * 2, vas[0].values[i * 4 ], true); vertices.setInt16((i * l + 1) * 2, vas[0].values[i * 4 + 1], true); @@ -130,7 +130,7 @@ class UtilMesh { vertices.setInt16((i * l + 4) * 2, vas[1].values[i * 2 ], true); vertices.setInt16((i * l + 5) * 2, vas[1].values[i * 2 + 1], true); } - g.vertexBuffer.unlock(); + g._vertexBuffer.unlock(); } UtilMesh.removeMergedMesh(); @@ -140,12 +140,12 @@ class UtilMesh { static flipNormals = () => { let objects = Project.paintObjects; for (let o of objects) { - let vas = o.data.raw.vertex_arrays; + let vas = o.data.vertex_arrays; let va0 = vas[0].values; let va1 = vas[1].values; let g = o.data; - let l = g.structLength; - let vertices = g.vertexBuffer.lock(); // posnortex + let l = g._struct.byteSize() / 2; + let vertices = g._vertexBuffer.lock(); // posnortex for (let i = 0; i < Math.floor(vertices.byteLength / 2 / l); ++i) { va0[i * 4 + 3] = -va0[i * 4 + 3]; va1[i * 2] = -va1[i * 2]; @@ -154,7 +154,7 @@ class UtilMesh { vertices.setInt16((i * l + 4) * 2, -vertices.getInt16((i * l + 4) * 2, true), true); vertices.setInt16((i * l + 5) * 2, -vertices.getInt16((i * l + 5) * 2, true), true); } - g.vertexBuffer.unlock(); + g._vertexBuffer.unlock(); } ///if (krom_direct3d12 || krom_vulkan || krom_metal) @@ -171,9 +171,9 @@ class UtilMesh { let objects = Project.paintObjects; for (let o of objects) { let g = o.data; - let l = g.structLength; - let inda = g.indices[0]; - let vertices = g.vertexBuffer.lock(); // posnortex + let l = g._struct.byteSize() / 2; + let inda = g._indices[0]; + let vertices = g._vertexBuffer.lock(); // posnortex for (let i = 0; i < Math.floor(inda.length / 3); ++i) { let i1 = inda[i * 3 ]; let i2 = inda[i * 3 + 1]; @@ -240,10 +240,10 @@ class UtilMesh { } } } - g.vertexBuffer.unlock(); + g._vertexBuffer.unlock(); - let va0 = o.data.raw.vertex_arrays[0].values; - let va1 = o.data.raw.vertex_arrays[1].values; + let va0 = o.data.vertex_arrays[0].values; + let va1 = o.data.vertex_arrays[1].values; for (let i = 0; i < Math.floor(vertices.byteLength / 4 / l); ++i) { va1[i * 2 ] = vertices.getInt16((i * l + 4) * 2, true); va1[i * 2 + 1] = vertices.getInt16((i * l + 5) * 2, true); @@ -263,8 +263,8 @@ class UtilMesh { let dz = 0.0; for (let o of Project.paintObjects) { let l = 4; - let sc = o.data.scalePos / 32767; - let va = o.data.raw.vertex_arrays[0].values; + let sc = o.data.scale_pos / 32767; + let va = o.data.vertex_arrays[0].values; let minx = va[0]; let maxx = va[0]; let miny = va[1]; @@ -289,15 +289,15 @@ class UtilMesh { for (let o of Project.paintObjects) { let g = o.data; - let sc = o.data.scalePos / 32767; - let va = o.data.raw.vertex_arrays[0].values; + let sc = o.data.scale_pos / 32767; + let va = o.data.vertex_arrays[0].values; let maxScale = 0.0; for (let i = 0; i < Math.floor(va.length / 4); ++i) { if (Math.abs(va[i * 4 ] * sc - dx) > maxScale) maxScale = Math.abs(va[i * 4 ] * sc - dx); if (Math.abs(va[i * 4 + 1] * sc - dy) > maxScale) maxScale = Math.abs(va[i * 4 + 1] * sc - dy); if (Math.abs(va[i * 4 + 2] * sc - dz) > maxScale) maxScale = Math.abs(va[i * 4 + 2] * sc - dz); } - o.transform.scaleWorld = o.data.scalePos = o.data.raw.scale_pos = maxScale; + o.transform.scaleWorld = o.data.scale_pos = o.data.scale_pos = maxScale; o.transform.buildMatrix(); for (let i = 0; i < Math.floor(va.length / 4); ++i) { @@ -306,14 +306,14 @@ class UtilMesh { va[i * 4 + 2] = Math.floor((va[i * 4 + 2] * sc - dz) / maxScale * 32767); } - let l = g.structLength; - let vertices = g.vertexBuffer.lock(); // posnortex + let l = g._struct.byteSize() / 2; + let vertices = g._vertexBuffer.lock(); // posnortex for (let i = 0; i < Math.floor(vertices.byteLength / 2 / l); ++i) { vertices.setInt16((i * l ) * 2, va[i * 4 ], true); vertices.setInt16((i * l + 1) * 2, va[i * 4 + 1], true); vertices.setInt16((i * l + 2) * 2, va[i * 4 + 2], true); } - g.vertexBuffer.unlock(); + g._vertexBuffer.unlock(); } UtilMesh.mergeMesh(); @@ -325,8 +325,8 @@ class UtilMesh { let res = texpaint_pack.width; let o = Project.paintObjects[0]; let g = o.data; - let l = g.structLength; - let vertices = g.vertexBuffer.lock(); // posnortex + let l = g._struct.byteSize() / 2; + let vertices = g._vertexBuffer.lock(); // posnortex for (let i = 0; i < Math.floor(vertices.byteLength / 2 / l); ++i) { let x = Math.floor(vertices.getInt16((i * l + 6) * 2, true) / 32767 * res); let y = Math.floor(vertices.getInt16((i * l + 7) * 2, true) / 32767 * res); @@ -337,9 +337,9 @@ class UtilMesh { vertices.setInt16((i * l + 1) * 2, vertices.getInt16((i * l + 1) * 2, true) - Math.floor(vertices.getInt16((i * l + 5) * 2, true) * h), true); vertices.setInt16((i * l + 2) * 2, vertices.getInt16((i * l + 2) * 2, true) - Math.floor(vertices.getInt16((i * l + 3) * 2, true) * h), true); } - g.vertexBuffer.unlock(); + g._vertexBuffer.unlock(); - let va0 = o.data.raw.vertex_arrays[0].values; + let va0 = o.data.vertex_arrays[0].values; for (let i = 0; i < Math.floor(vertices.byteLength / 4 / l); ++i) { va0[i * 4 ] = vertices.getInt16((i * l ) * 2, true); va0[i * 4 + 1] = vertices.getInt16((i * l + 1) * 2, true); diff --git a/base/Sources/UtilParticle.ts b/base/Sources/UtilParticle.ts index 00834089..49dd2a1f 100644 --- a/base/Sources/UtilParticle.ts +++ b/base/Sources/UtilParticle.ts @@ -53,7 +53,7 @@ class UtilParticle { } } - Data.getMaterial("Scene", "MaterialParticle", (md: MaterialData) => { + Data.getMaterial("Scene", "MaterialParticle", (md: TMaterialData) => { Context.raw.particleMaterial = md; for (let obj of Scene.raw.objects) { diff --git a/base/Sources/UtilRender.ts b/base/Sources/UtilRender.ts index 21ba8778..9924d788 100644 --- a/base/Sources/UtilRender.ts +++ b/base/Sources/UtilRender.ts @@ -31,9 +31,9 @@ class UtilRender { let light = Scene.lights[0]; let _lightStrength = light.data.strength; let probe = Scene.world; - let _probeStrength = probe.raw.strength; + let _probeStrength = probe.strength; light.data.strength = 0; - probe.raw.strength = 7; + probe.strength = 7; let _envmapAngle = Context.raw.envmapAngle; Context.raw.envmapAngle = 6.0; let _brushScale = Context.raw.brushScale; @@ -41,7 +41,7 @@ class UtilRender { let _brushNodesScale = Context.raw.brushNodesScale; Context.raw.brushNodesScale = 1.0; - Scene.world.envmap = Context.raw.previewEnvmap; + Scene.world._envmap = Context.raw.previewEnvmap; // No resize RenderPath.lastW = UtilRender.materialPreviewSize; RenderPath.lastH = UtilRender.materialPreviewSize; @@ -69,11 +69,11 @@ class UtilRender { Scene.camera.buildProjection(); Scene.camera.buildMatrix(); light.data.strength = _lightStrength; - probe.raw.strength = _probeStrength; + probe.strength = _probeStrength; Context.raw.envmapAngle = _envmapAngle; Context.raw.brushScale = _brushScale; Context.raw.brushNodesScale = _brushNodesScale; - Scene.world.envmap = Context.raw.showEnvmap ? Context.raw.savedEnvmap : Context.raw.emptyEnvmap; + Scene.world._envmap = Context.raw.showEnvmap ? Context.raw.savedEnvmap : Context.raw.emptyEnvmap; MakeMaterial.parseMeshMaterial(); Context.raw.ddirty = 0; } @@ -106,7 +106,7 @@ class UtilRender { Viewport.updateCameraType(CameraType.CameraPerspective); let light = Scene.lights[0]; light.visible = false; - Scene.world.envmap = Context.raw.previewEnvmap; + Scene.world._envmap = Context.raw.previewEnvmap; // No resize RenderPath.lastW = UtilRender.decalPreviewSize; @@ -136,7 +136,7 @@ class UtilRender { Scene.camera.buildMatrix(); light = Scene.lights[0]; light.visible = true; - Scene.world.envmap = Context.raw.showEnvmap ? Context.raw.savedEnvmap : Context.raw.emptyEnvmap; + Scene.world._envmap = Context.raw.showEnvmap ? Context.raw.savedEnvmap : Context.raw.emptyEnvmap; MakeMaterial.parseMeshMaterial(); Context.raw.ddirty = 1; // Refresh depth for decal paint @@ -376,7 +376,7 @@ class UtilRender { Context.raw.paintObject.transform.buildMatrix(); g4.begin(); - g4.setPipeline(res.scon.pipeState); + g4.setPipeline(res.scon._pipeState); Uniforms.setContextConstants(g4, res.scon, [""]); Uniforms.setObjectConstants(g4, res.scon, Context.raw.paintObject); Uniforms.setMaterialConstants(g4, res.scon, res.mcon); diff --git a/base/Sources/UtilUV.ts b/base/Sources/UtilUV.ts index 069202e9..e8028b3c 100644 --- a/base/Sources/UtilUV.ts +++ b/base/Sources/UtilUV.ts @@ -32,7 +32,7 @@ class UtilUV { UtilUV.uvmapCached = true; let merged = Context.raw.mergedObject; let mesh = (Context.raw.layerFilter == 0 && merged != null) ? - merged.data.raw : Context.raw.paintObject.data.raw; + merged.data : Context.raw.paintObject.data; let texa = mesh.vertex_arrays[2].values; let inda = mesh.index_arrays[0].values; @@ -68,7 +68,7 @@ class UtilUV { } UtilUV.trianglemapCached = true; - let merged = Context.raw.mergedObject != null ? Context.raw.mergedObject.data.raw : Context.raw.paintObject.data.raw; + let merged = Context.raw.mergedObject != null ? Context.raw.mergedObject.data : Context.raw.paintObject.data; let mesh = merged; let texa = mesh.vertex_arrays[2].values; let inda = mesh.index_arrays[0].values; @@ -131,11 +131,11 @@ class UtilUV { g4.clear(0x00000000); g4.setPipeline(UtilUV.pipeDilate); ///if (krom_metal || krom_vulkan) - g4.setVertexBuffer(geom.get([{name: "tex", data: "short2norm"}])); + g4.setVertexBuffer(MeshData.get(geom, [{name: "tex", data: "short2norm"}])); ///else - g4.setVertexBuffer(geom.vertexBuffer); + g4.setVertexBuffer(geom._vertexBuffer); ///end - g4.setIndexBuffer(geom.indexBuffers[0]); + g4.setIndexBuffer(geom._indexBuffers[0]); g4.drawIndexedVertices(); g4.end(); UtilUV.dilatemapCached = true; diff --git a/base/Sources/Viewport.ts b/base/Sources/Viewport.ts index 85dfbf4e..bc18f2e5 100644 --- a/base/Sources/Viewport.ts +++ b/base/Sources/Viewport.ts @@ -4,12 +4,12 @@ class Viewport { static scaleToBounds = () => { let po = Context.raw.mergedObject == null ? Context.mainObject() : Context.raw.mergedObject; let md = po.data; - md.calculateAABB(); - let r = Math.sqrt(md.aabb.x * md.aabb.x + md.aabb.y * md.aabb.y + md.aabb.z * md.aabb.z); + let aabb = MeshData.calculateAABB(md); + let r = Math.sqrt(aabb.x * aabb.x + aabb.y * aabb.y + aabb.z * aabb.z); po = Context.mainObject(); - po.transform.dim.x = md.aabb.x; - po.transform.dim.y = md.aabb.y; - po.transform.dim.z = md.aabb.z; + po.transform.dim.x = aabb.x; + po.transform.dim.y = aabb.y; + po.transform.dim.z = aabb.z; po.transform.scale.set(2 / r, 2 / r, 2 / r); po.transform.loc.set(0, 0, 0); po.transform.buildMatrix();