From 9cecc64a7a3ae25c8b36e40e6718d3595f0c9da7 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 6 Apr 2020 22:00:00 +0200 Subject: [PATCH] Add material workspace --- Sources/arm/Context.hx | 2 +- Sources/arm/Enums.hx | 4 +- Sources/arm/io/ImportFolder.hx | 2 +- Sources/arm/io/ImportMesh.hx | 4 +- Sources/arm/node/MakeMeshPreview.hx | 2 +- Sources/arm/node/MaterialParser.hx | 8 ++-- Sources/arm/node/NodesMaterial.hx | 2 +- Sources/arm/render/Inc.hx | 2 +- Sources/arm/render/RenderPathPaint.hx | 4 +- Sources/arm/render/RenderPathPreview.hx | 2 +- Sources/arm/ui/TabMaterials.hx | 4 +- Sources/arm/ui/TabTextures.hx | 12 +++--- Sources/arm/ui/UIMenubar.hx | 7 +--- Sources/arm/ui/UINodes.hx | 4 +- Sources/arm/ui/UISidebar.hx | 52 +++++++++++-------------- Sources/arm/ui/UIToolbar.hx | 2 +- Sources/arm/util/MeshUtil.hx | 6 +-- Sources/arm/util/RenderUtil.hx | 2 +- 18 files changed, 57 insertions(+), 64 deletions(-) diff --git a/Sources/arm/Context.hx b/Sources/arm/Context.hx index 112850fc..b9607d2b 100644 --- a/Sources/arm/Context.hx +++ b/Sources/arm/Context.hx @@ -329,7 +329,7 @@ class Context { public static function selectObject(o: Object) { object = o; - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { if (Std.is(o, MeshObject)) { for (i in 0...Project.materialsScene.length) { if (Project.materialsScene[i].data == cast(o, MeshObject).materials[0]) { diff --git a/Sources/arm/Enums.hx b/Sources/arm/Enums.hx index 34c19b83..ea6d4f78 100644 --- a/Sources/arm/Enums.hx +++ b/Sources/arm/Enums.hx @@ -24,7 +24,9 @@ package arm; @:enum abstract SpaceType(Int) from Int to Int { var SpacePaint = 0; - var SpaceScene = 1; + // var SpaceSculpt = 0; + var SpaceMaterial = 1; + // var SpaceBake = 0; var SpaceRender = 2; } diff --git a/Sources/arm/io/ImportFolder.hx b/Sources/arm/io/ImportFolder.hx index 194f557d..b9e61e7e 100644 --- a/Sources/arm/io/ImportFolder.hx +++ b/Sources/arm/io/ImportFolder.hx @@ -67,7 +67,7 @@ class ImportFolder { } // Create material - var isScene = UIHeader.inst.worktab.position == SpaceScene; + var isScene = UIHeader.inst.worktab.position == SpaceRender; if (isScene) { MaterialUtil.removeMaterialCache(); Data.getMaterial("Scene", "Material2", function(md: MaterialData) { diff --git a/Sources/arm/io/ImportMesh.hx b/Sources/arm/io/ImportMesh.hx index bc40a66e..ed89ebd2 100644 --- a/Sources/arm/io/ImportMesh.hx +++ b/Sources/arm/io/ImportMesh.hx @@ -93,7 +93,7 @@ class ImportMesh { } var raw: TMeshData = null; - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { raw = rawMesh(mesh); if (mesh.texa != null) raw.vertex_arrays.push({ values: mesh.texa, attrib: "tex", data: "short2norm" }); } @@ -107,7 +107,7 @@ class ImportMesh { new MeshData(raw, function(md: MeshData) { // Append - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { var mats = new haxe.ds.Vector(1); mats[0] = Context.materialScene.data; var object = Scene.active.addMeshObject(md, mats, Scene.active.getChild("Scene")); diff --git a/Sources/arm/node/MakeMeshPreview.hx b/Sources/arm/node/MakeMeshPreview.hx index 5dd7eb08..5739cadb 100644 --- a/Sources/arm/node/MakeMeshPreview.hx +++ b/Sources/arm/node/MakeMeshPreview.hx @@ -13,7 +13,7 @@ class MakeMeshPreview { public static var opacityDiscardScene = 0.5; public static function run(data: MaterialShaderData, matcon: TMaterialContext): MaterialShaderContext { - var isScene = UIHeader.inst.worktab.position == SpaceScene; + var isScene = UIHeader.inst.worktab.position == SpaceRender; var context_id = "mesh"; var con_mesh: MaterialShaderContext = data.add_context({ name: context_id, diff --git a/Sources/arm/node/MaterialParser.hx b/Sources/arm/node/MaterialParser.hx index 8b1ad62d..38643a64 100644 --- a/Sources/arm/node/MaterialParser.hx +++ b/Sources/arm/node/MaterialParser.hx @@ -19,7 +19,7 @@ class MaterialParser { } public static function parseMeshMaterial() { - if (UIHeader.inst.worktab.position == SpaceScene) return; + if (UIHeader.inst.worktab.position == SpaceRender) return; var m = Project.materials[0].data; var scon: ShaderContext = null; for (c in m.shader.contexts) if (c.raw.name == "mesh") { scon = c; break; } @@ -63,7 +63,7 @@ class MaterialParser { public static function parseMeshPreviewMaterial() { if (!getMOut()) return; - var m = UIHeader.inst.worktab.position == SpaceScene ? Context.materialScene.data : Project.materials[0].data; + var m = UIHeader.inst.worktab.position == SpaceRender ? Context.materialScene.data : Project.materials[0].data; var scon: ShaderContext = null; for (c in m.shader.contexts) if (c.raw.name == "mesh") { scon = c; break; } m.shader.raw.contexts.remove(scon.raw); @@ -92,7 +92,7 @@ class MaterialParser { m.shader.raw.contexts.push(scon.raw); m.shader.contexts.push(scon); - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { makeVoxel(m); } } @@ -114,7 +114,7 @@ class MaterialParser { public static function parsePaintMaterial() { if (!getMOut()) return; - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { parseMeshPreviewMaterial(); return; } diff --git a/Sources/arm/node/NodesMaterial.hx b/Sources/arm/node/NodesMaterial.hx index 7d6403cb..b5ff8c32 100644 --- a/Sources/arm/node/NodesMaterial.hx +++ b/Sources/arm/node/NodesMaterial.hx @@ -2168,7 +2168,7 @@ class NodesMaterial { for (c in list) { for (n in c) { if (n.type == nodeType) { - var isScene = arm.ui.UIHeader.inst.worktab.position == SpaceScene; + var isScene = arm.ui.UIHeader.inst.worktab.position == SpaceRender; var material = isScene ? Context.materialScene : Context.material; var canvas = material.canvas; var nodes = material.nodes; diff --git a/Sources/arm/render/Inc.hx b/Sources/arm/render/Inc.hx index 3a6bae31..4f102e50 100644 --- a/Sources/arm/render/Inc.hx +++ b/Sources/arm/render/Inc.hx @@ -186,7 +186,7 @@ class Inc { } } - if (Context.ddirty <= 0 && Context.rdirty <= 0 && (Context.pdirty <= 0 || UIHeader.inst.worktab.position == SpaceScene)) { + if (Context.ddirty <= 0 && Context.rdirty <= 0 && (Context.pdirty <= 0 || UIHeader.inst.worktab.position == SpaceRender)) { if (mx != lastX || my != lastY || mouse.locked) Context.ddirty = 0; if (Context.ddirty > -2) { path.setTarget(""); diff --git a/Sources/arm/render/RenderPathPaint.hx b/Sources/arm/render/RenderPathPaint.hx index 239dffa3..232f3df4 100644 --- a/Sources/arm/render/RenderPathPaint.hx +++ b/Sources/arm/render/RenderPathPaint.hx @@ -97,7 +97,7 @@ class RenderPathPaint { public static function commandsPaint() { var tid = Context.layer.id; - if (Context.pdirty > 0 && UIHeader.inst.worktab.position != SpaceScene) { + if (Context.pdirty > 0 && UIHeader.inst.worktab.position != SpaceRender) { if (Context.tool == ToolParticle) { path.setTarget("texparticle"); path.clearTarget(0x00000000); @@ -357,7 +357,7 @@ class RenderPathPaint { tool != ToolParticle) { return; } - if (!App.uiEnabled || UIHeader.inst.worktab.position == SpaceScene) { + if (!App.uiEnabled || UIHeader.inst.worktab.position == SpaceRender) { return; } diff --git a/Sources/arm/render/RenderPathPreview.hx b/Sources/arm/render/RenderPathPreview.hx index 97a83bed..cfac6b22 100644 --- a/Sources/arm/render/RenderPathPreview.hx +++ b/Sources/arm/render/RenderPathPreview.hx @@ -118,7 +118,7 @@ class RenderPathPreview { #end var framebuffer = "texpreview"; - var selectedMat = UIHeader.inst.worktab.position == SpaceScene ? Context.materialScene : Context.material; + var selectedMat = UIHeader.inst.worktab.position == SpaceRender ? Context.materialScene : Context.material; RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image; RenderPath.active.renderTargets.get("texpreview_icon").image = selectedMat.imageIcon; diff --git a/Sources/arm/ui/TabMaterials.hx b/Sources/arm/ui/TabMaterials.hx index 7ffbfc48..9ba4478f 100644 --- a/Sources/arm/ui/TabMaterials.hx +++ b/Sources/arm/ui/TabMaterials.hx @@ -21,7 +21,7 @@ class TabMaterials { public static function draw() { var ui = UISidebar.inst.ui; - var isScene = UIHeader.inst.worktab.position == SpaceScene; + var isScene = UIHeader.inst.worktab.position == SpaceRender; var materials = isScene ? Project.materialsScene : Project.materials; var selectMaterial = isScene ? Context.selectMaterialScene : Context.selectMaterial; @@ -212,6 +212,6 @@ class TabMaterials { } static function getSelectedMaterial():MaterialSlot { - return UIHeader.inst.worktab.position == SpaceScene ? Context.materialScene : Context.material; + return UIHeader.inst.worktab.position == SpaceRender ? Context.materialScene : Context.material; } } diff --git a/Sources/arm/ui/TabTextures.hx b/Sources/arm/ui/TabTextures.hx index c020bca5..673329d0 100644 --- a/Sources/arm/ui/TabTextures.hx +++ b/Sources/arm/ui/TabTextures.hx @@ -115,11 +115,13 @@ class TabTextures { Project.assetMap.remove(asset.id); Project.assets.splice(i, 1); Project.assetNames.splice(i, 1); - iron.system.Tween.timer(0.1, function() { - arm.node.MaterialParser.parsePaintMaterial(); - arm.util.RenderUtil.makeMaterialPreview(); - UISidebar.inst.hwnd1.redraws = 2; - }); + function _parse(g: kha.graphics4.Graphics) { + arm.node.MaterialParser.parsePaintMaterial(); + arm.util.RenderUtil.makeMaterialPreview(); + UISidebar.inst.hwnd1.redraws = 2; + iron.App.removeRender(_parse); + } + iron.App.notifyOnRender(_parse); } }, 4); } diff --git a/Sources/arm/ui/UIMenubar.hx b/Sources/arm/ui/UIMenubar.hx index 8987b893..ba868b2c 100644 --- a/Sources/arm/ui/UIMenubar.hx +++ b/Sources/arm/ui/UIMenubar.hx @@ -58,11 +58,8 @@ class UIMenubar { var panelx = (iron.App.x() - UIToolbar.inst.toolbarw) + menubarw; if (ui.window(workspaceHandle, panelx, 0, System.windowWidth() - UISidebar.inst.windowW - menubarw, Std.int(UIHeader.defaultHeaderH * ui.SCALE()))) { ui.tab(UIHeader.inst.worktab, tr("Paint")); - // ui.tab(UIHeader.inst.worktab, "Sculpt"); - ui.tab(UIHeader.inst.worktab, tr("Scene")); - #if arm_creator + ui.tab(UIHeader.inst.worktab, tr("Material")); ui.tab(UIHeader.inst.worktab, tr("Render")); - #end if (UIHeader.inst.worktab.changed) { Context.ddirty = 2; UIToolbar.inst.toolbarHandle.redraws = 2; @@ -71,7 +68,7 @@ class UIMenubar { UISidebar.inst.hwnd1.redraws = 2; UISidebar.inst.hwnd2.redraws = 2; - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { Context.selectTool(ToolGizmo); } diff --git a/Sources/arm/ui/UINodes.hx b/Sources/arm/ui/UINodes.hx index 8e109526..ea953fe5 100644 --- a/Sources/arm/ui/UINodes.hx +++ b/Sources/arm/ui/UINodes.hx @@ -87,12 +87,12 @@ class UINodes { } public function getCanvasMaterial(): TNodeCanvas { - var isScene = UIHeader.inst.worktab.position == SpaceScene; + var isScene = UIHeader.inst.worktab.position == SpaceRender; return isScene ? Context.materialScene.canvas : Context.material.canvas; } public function getNodes(): Nodes { - var isScene = UIHeader.inst.worktab.position == SpaceScene; + var isScene = UIHeader.inst.worktab.position == SpaceRender; if (canvasType == CanvasMaterial) return isScene ? Context.materialScene.nodes : Context.material.nodes; else return Context.brush.nodes; } diff --git a/Sources/arm/ui/UISidebar.hx b/Sources/arm/ui/UISidebar.hx index 5b79e0c2..3073742c 100644 --- a/Sources/arm/ui/UISidebar.hx +++ b/Sources/arm/ui/UISidebar.hx @@ -645,7 +645,7 @@ class UISidebar { if (undoPressed) History.undo(); else if (redoPressed) History.redo(); - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { arm.plugin.Gizmo.update(); } @@ -676,43 +676,35 @@ class UISidebar { } Context.gizmo.visible = false; - if (UIHeader.inst.worktab.position == SpacePaint) { - if (ui.window(hwnd, tabx, 0, windowW, tabh)) { - TabLayers.draw(); - TabHistory.draw(); - TabPlugins.draw(); - } - if (ui.window(hwnd1, tabx, tabh, windowW, tabh1)) { - Context.object = Context.paintObject; - TabMaterials.draw(); - TabBrushes.draw(); - TabParticles.draw(); - } - if (ui.window(hwnd2, tabx, tabh + tabh1, windowW, tabh2)) { - TabTextures.draw(); - TabMeshes.draw(); - TabFonts.draw(); + if (ui.window(hwnd, tabx, 0, windowW, tabh)) { + TabLayers.draw(); + TabHistory.draw(); + TabPlugins.draw(); + + if (UIHeader.inst.worktab.position == SpaceRender) { + TabOutliner.draw(); } } - else if (UIHeader.inst.worktab.position == SpaceScene) { - Context.gizmo.visible = true; - if (ui.window(hwnd, tabx, 0, windowW, tabh)) { - TabOutliner.draw(); - TabPlugins.draw(); - } - if (ui.window(hwnd1, tabx, tabh, windowW, tabh1)) { - TabMaterials.draw(); + if (ui.window(hwnd1, tabx, tabh, windowW, tabh1)) { + Context.object = Context.paintObject; + TabMaterials.draw(); + TabBrushes.draw(); + TabParticles.draw(); + + if (UIHeader.inst.worktab.position == SpaceRender) { TabProperties.draw(); #if arm_creator TabTraits.draw(); #end } - if (ui.window(hwnd2, tabx, tabh + tabh1, windowW, tabh2)) { - TabTextures.draw(); - TabMeshes.draw(); - TabFonts.draw(); - } } + if (ui.window(hwnd2, tabx, tabh + tabh1, windowW, tabh2)) { + TabTextures.draw(); + TabMeshes.draw(); + TabFonts.draw(); + } + + Context.gizmo.visible = UIHeader.inst.worktab.position == SpaceRender; ui.end(); g.begin(false); diff --git a/Sources/arm/ui/UIToolbar.hx b/Sources/arm/ui/UIToolbar.hx index 76ac7f31..b90779fa 100644 --- a/Sources/arm/ui/UIToolbar.hx +++ b/Sources/arm/ui/UIToolbar.hx @@ -65,7 +65,7 @@ class UIToolbar { ui._y += 2; } } - else if (UIHeader.inst.worktab.position == SpaceScene) { + else if (UIHeader.inst.worktab.position == SpaceRender) { var img = Res.get("icons.k"); var imgw = ui.SCALE() > 1 ? 100 : 50; ui._x += 2; diff --git a/Sources/arm/util/MeshUtil.hx b/Sources/arm/util/MeshUtil.hx index 3d50f065..5de20523 100644 --- a/Sources/arm/util/MeshUtil.hx +++ b/Sources/arm/util/MeshUtil.hx @@ -76,7 +76,7 @@ class MeshUtil { } public static function swapAxis(a: Int, b: Int) { - var objects = UIHeader.inst.worktab.position == SpaceScene ? [cast(Context.object, MeshObject)] : Project.paintObjects; + var objects = UIHeader.inst.worktab.position == SpaceRender ? [cast(Context.object, MeshObject)] : Project.paintObjects; for (o in objects) { // Remapping vertices, backle up // 0 - x, 1 - y, 2 - z @@ -126,7 +126,7 @@ class MeshUtil { } public static function flipNormals() { - var objects = UIHeader.inst.worktab.position == SpaceScene ? [cast(Context.object, MeshObject)] : Project.paintObjects; + var objects = UIHeader.inst.worktab.position == SpaceRender ? [cast(Context.object, MeshObject)] : Project.paintObjects; for (o in objects) { var g = o.data.geom; var vertices = g.vertexBuffer.lockInt16(); // posnortex @@ -149,7 +149,7 @@ class MeshUtil { var vc = new Vec4(); var cb = new Vec4(); var ab = new Vec4(); - var objects = UIHeader.inst.worktab.position == SpaceScene ? [cast(Context.object, MeshObject)] : Project.paintObjects; + var objects = UIHeader.inst.worktab.position == SpaceRender ? [cast(Context.object, MeshObject)] : Project.paintObjects; for (o in objects) { var g = o.data.geom; var inda = g.indices[0]; diff --git a/Sources/arm/util/RenderUtil.hx b/Sources/arm/util/RenderUtil.hx index fb8995d6..70949903 100644 --- a/Sources/arm/util/RenderUtil.hx +++ b/Sources/arm/util/RenderUtil.hx @@ -33,7 +33,7 @@ class RenderUtil { var painto = Context.paintObject; Context.paintObject = sphere; - if (UIHeader.inst.worktab.position == SpaceScene) { + if (UIHeader.inst.worktab.position == SpaceRender) { sphere.materials[0] = Context.materialScene.data; Context.materialScene.previewReady = true; }