diff --git a/Assets/common/shader_datas.arm b/Assets/common/shader_datas.arm index 5e00b1a9..d27887a0 100644 Binary files a/Assets/common/shader_datas.arm and b/Assets/common/shader_datas.arm differ diff --git a/Assets/creator/Scene.arm b/Assets/creator/Scene.arm index 2aa6105c..2d711a73 100644 Binary files a/Assets/creator/Scene.arm and b/Assets/creator/Scene.arm differ diff --git a/Assets/creator/deferred_light.arm b/Assets/creator/deferred_light.arm index 77c712c6..ef4a6c4f 100644 Binary files a/Assets/creator/deferred_light.arm and b/Assets/creator/deferred_light.arm differ diff --git a/Assets/creator/plugins/packager.js b/Assets/creator/plugins/packager.js index c4c0a3f8..e32d2a79 100644 --- a/Assets/creator/plugins/packager.js +++ b/Assets/creator/plugins/packager.js @@ -17,15 +17,15 @@ plugin.drawUI = function(ui) { arm.File.copy(sourceData + sep + "player.bin", dest + sep + "krom.bin"); var fileList = [ - "ammo.wasm.js", "ammo.wasm.wasm", "brdf.png", - "clouds_base.raw", "clouds_detail.raw", "clouds_map.png", - "deferred_light.arm", "font_default.ttf", "noise256.png", - "Scene.arm", "shader_datas.arm", "smaa_area.png", "smaa_search.png", - "water_base.png", "water_detail.png", "water_foam.png", "water_pass.arm", - "World_irradiance.arm", "world_pass.arm", "World_radiance.hdr", - "World_radiance_0.hdr", "World_radiance_1.hdr", "World_radiance_2.hdr", - "World_radiance_3.hdr", "World_radiance_4.hdr", "World_radiance_5.hdr", - "World_radiance_6.hdr", "World_radiance_7.hdr"]; + "ammo.wasm.js", "ammo.wasm.wasm", "brdf.k", + "clouds_base.raw", "clouds_detail.raw", "clouds_map.k", + "deferred_light.arm", "font_default.ttf", "noise256.k", + "Scene.arm", "shader_datas.arm", "smaa_area.k", "smaa_search.k", + "water_base.k", "water_detail.k", "water_foam.k", "water_pass.arm", + "World_irradiance.arm", "world_pass.arm", "World_radiance.k", + "World_radiance_0.k", "World_radiance_1.k", "World_radiance_2.k", + "World_radiance_3.k", "World_radiance_4.k", "World_radiance_5.k", + "World_radiance_6.k", "World_radiance_7.k"]; for (const file of fileList) { arm.File.copy(sourceData + sep + file, destData + sep + file); } diff --git a/Assets/creator/water_pass.arm b/Assets/creator/water_pass.arm index a4833529..d46029f0 100644 Binary files a/Assets/creator/water_pass.arm and b/Assets/creator/water_pass.arm differ diff --git a/Assets/creator/world_pass.arm b/Assets/creator/world_pass.arm index d924a361..273bf96b 100644 Binary files a/Assets/creator/world_pass.arm and b/Assets/creator/world_pass.arm differ diff --git a/Assets/painter/Scene.arm b/Assets/painter/Scene.arm index 780334a1..1a7f0694 100644 Binary files a/Assets/painter/Scene.arm and b/Assets/painter/Scene.arm differ diff --git a/Assets/painter/World.hdr b/Assets/painter/World.hdr deleted file mode 100644 index f85f4267..00000000 Binary files a/Assets/painter/World.hdr and /dev/null differ diff --git a/Assets/painter/deferred_light.arm b/Assets/painter/deferred_light.arm index ce624f5a..d841b39e 100644 Binary files a/Assets/painter/deferred_light.arm and b/Assets/painter/deferred_light.arm differ diff --git a/Assets/plugins/converter.js b/Assets/plugins/converter.js index 88de81a8..9bcdf803 100644 --- a/Assets/plugins/converter.js +++ b/Assets/plugins/converter.js @@ -41,6 +41,7 @@ plugin.drawUI = function(ui) { let v = arm.ReflectField(d, n); if (arm.StdIs(v, Array)) { if (arm.StdIs(v[0], Number)) { + arm.Log.trace(n); let ar = null; if (v[0] === 0) ar = new Float32Array(v.length - 1); else if (v[0] === 1) ar = new Uint32Array(v.length - 1); @@ -48,9 +49,9 @@ plugin.drawUI = function(ui) { for (let i = 0; i < v.length - 1; ++i) ar[i] = v[i + 1]; arm.ReflectSetField(d, n, ar); } - else for (const e of v) if (arm.TypeOf(e) === arm.TObject) iterate(e); + else for (const e of v) if (typeof e === 'object') iterate(e); } - else if (arm.TypeOf(v) === arm.TObject) iterate(v); + else if (typeof v === 'object') iterate(v); } } iterate(parsed); diff --git a/Sources/arm/App.hx b/Sources/arm/App.hx index 2b499aa4..a3b880e6 100644 --- a/Sources/arm/App.hx +++ b/Sources/arm/App.hx @@ -95,7 +95,7 @@ class App { #end Data.getFont("font_default.ttf", function(f: Font) { - Data.getImage("color_wheel.png", function(image: Image) { + Data.getImage("color_wheel.k", function(image: Image) { font = f; theme = zui.Themes.dark; theme.FILL_WINDOW_BG = true; diff --git a/Sources/arm/Plugin.hx b/Sources/arm/Plugin.hx index cf8d6928..6e3b5a84 100644 --- a/Sources/arm/Plugin.hx +++ b/Sources/arm/Plugin.hx @@ -55,8 +55,6 @@ class IronBridge { @:expose("arm") class ArmBridge { - public static var TypeOf = Type.typeof; - public static var TObject = TObject; public static var Json = haxe.Json; public static var ReflectFields = Reflect.fields; public static var ReflectField = Reflect.field; diff --git a/Sources/arm/Project.hx b/Sources/arm/Project.hx index 89c5eac5..8006bbdf 100644 --- a/Sources/arm/Project.hx +++ b/Sources/arm/Project.hx @@ -218,7 +218,7 @@ class Project { UITrait.inst.savedEnvmap = UITrait.inst.defaultEnvmap; Scene.active.world.envmap = UITrait.inst.emptyEnvmap; - Scene.active.world.raw.envmap = "World.hdr"; + Scene.active.world.raw.envmap = "World_radiance.k"; UITrait.inst.showEnvmapHandle.selected = UITrait.inst.showEnvmap = false; Scene.active.world.probe.radiance = UITrait.inst.defaultRadiance; Scene.active.world.probe.radianceMipmaps = UITrait.inst.defaultRadianceMipmaps; diff --git a/Sources/arm/data/LayerSlot.hx b/Sources/arm/data/LayerSlot.hx index d1515208..dfc03853 100644 --- a/Sources/arm/data/LayerSlot.hx +++ b/Sources/arm/data/LayerSlot.hx @@ -346,9 +346,13 @@ class LayerSlot { Context.setLayer(this); material_mask = Context.material; Layers.updateFillLayers(4); - MaterialParser.parsePaintMaterial(); - Context.layerPreviewDirty = true; - UITrait.inst.hwnd.redraws = 2; + function _parse(_) { + MaterialParser.parsePaintMaterial(); + Context.layerPreviewDirty = true; + UITrait.inst.hwnd.redraws = 2; + iron.App.removeRender(_parse); + } + iron.App.notifyOnRender(_parse); } public function toPaintLayer() { diff --git a/Sources/arm/node/Material.hx b/Sources/arm/node/Material.hx index 7b6cc715..56c539d9 100644 --- a/Sources/arm/node/Material.hx +++ b/Sources/arm/node/Material.hx @@ -457,7 +457,7 @@ class Material { } else if (node.type == "TEX_NOISE") { curshader.add_function(MaterialFunctions.str_tex_noise); - curshader.add_uniform("sampler2D snoise256", "$noise256.png"); + curshader.add_uniform("sampler2D snoise256", "$noise256.k"); var co = getCoord(node); var scale = parse_value_input(node.inputs[1]); var res = 'vec3(tex_noise($co * $scale), tex_noise($co * $scale + 0.33), tex_noise($co * $scale + 0.66))'; @@ -466,7 +466,7 @@ class Material { } else if (node.type == "TEX_VORONOI") { curshader.add_function(MaterialFunctions.str_tex_voronoi); - curshader.add_uniform("sampler2D snoise256", "$noise256.png"); + curshader.add_uniform("sampler2D snoise256", "$noise256.k"); var co = getCoord(node); var scale = parse_value_input(node.inputs[1]); var but = node.buttons[0]; //coloring; @@ -1128,7 +1128,7 @@ class Material { } else if (node.type == "TEX_NOISE") { curshader.add_function(MaterialFunctions.str_tex_noise); - curshader.add_uniform("sampler2D snoise256", "$noise256.png"); + curshader.add_uniform("sampler2D snoise256", "$noise256.k"); var co = getCoord(node); var scale = parse_value_input(node.inputs[1]); var res = 'tex_noise($co * $scale)'; @@ -1137,7 +1137,7 @@ class Material { } else if (node.type == "TEX_VORONOI") { curshader.add_function(MaterialFunctions.str_tex_voronoi); - curshader.add_uniform("sampler2D snoise256", "$noise256.png"); + curshader.add_uniform("sampler2D snoise256", "$noise256.k"); var co = getCoord(node); var scale = parse_value_input(node.inputs[1]); var but = node.buttons[0]; // coloring diff --git a/Sources/arm/render/RenderPathDeferred.hx b/Sources/arm/render/RenderPathDeferred.hx index d2fed9eb..ce29adf3 100644 --- a/Sources/arm/render/RenderPathDeferred.hx +++ b/Sources/arm/render/RenderPathDeferred.hx @@ -137,13 +137,13 @@ class RenderPathDeferred { #if arm_world { path.loadShader("water_pass/water_pass/water_pass"); - Scene.active.embedData("water_base.png", function() {}); - Scene.active.embedData("water_detail.png", function() {}); - Scene.active.embedData("water_foam.png", function() {}); - Scene.active.embedData("water_foam.png", function() {}); + Scene.active.embedData("water_base.k", function() {}); + Scene.active.embedData("water_detail.k", function() {}); + Scene.active.embedData("water_foam.k", function() {}); + Scene.active.embedData("water_foam.k", function() {}); Scene.active.embedData("clouds_base.raw", function() {}); Scene.active.embedData("clouds_detail.raw", function() {}); - Scene.active.embedData("clouds_map.png", function() {}); + Scene.active.embedData("clouds_map.k", function() {}); } #end diff --git a/Sources/arm/render/RenderPathPaint.hx b/Sources/arm/render/RenderPathPaint.hx index 642512bb..22b297e3 100644 --- a/Sources/arm/render/RenderPathPaint.hx +++ b/Sources/arm/render/RenderPathPaint.hx @@ -266,7 +266,7 @@ class RenderPathPaint { path.setTarget(""); g.setPipeline(Layers.pipeCursor); var decal = Context.tool == ToolDecal || Context.tool == ToolText; - var img = decal ? UITrait.inst.decalImage : Res.get("cursor.png"); + var img = decal ? UITrait.inst.decalImage : Res.get("cursor.k"); g.setTexture(Layers.cursorTex, img); var gbuffer0 = path.renderTargets.get("gbuffer0").image; g.setTextureDepth(Layers.cursorGbufferD, gbuffer0); diff --git a/Sources/arm/render/RenderPathRaytrace.hx b/Sources/arm/render/RenderPathRaytrace.hx index a2fd69a5..7ef53633 100644 --- a/Sources/arm/render/RenderPathRaytrace.hx +++ b/Sources/arm/render/RenderPathRaytrace.hx @@ -45,9 +45,9 @@ class RenderPathRaytrace { if (lastEnvmap != savedEnvmap || lastLayer != layer.texpaint) { lastEnvmap = savedEnvmap; lastLayer = layer.texpaint; - var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.png"); - var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.png"); - var bnoise_rank = Scene.active.embedded.get("bnoise_rank.png"); + var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.k"); + var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k"); + var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k"); Krom.raytraceSetTextures(layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_); } @@ -165,9 +165,9 @@ class RenderPathRaytrace { var baketex0 = path.renderTargets.get("baketex0").image; var baketex1 = path.renderTargets.get("baketex1").image; - var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.png"); - var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.png"); - var bnoise_rank = Scene.active.embedded.get("bnoise_rank.png"); + var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.k"); + var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k"); + var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k"); Krom.raytraceSetTextures(baketex0.renderTarget_, baketex1.renderTarget_, Context.layer.texpaint.renderTarget_, savedEnvmap.texture_, bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_); } @@ -211,16 +211,16 @@ class RenderPathRaytrace { static function raytraceInit(shaderName: String, build = true) { if (first) { first = false; - Scene.active.embedData("bnoise_sobol.png", function() {}); - Scene.active.embedData("bnoise_scramble.png", function() {}); - Scene.active.embedData("bnoise_rank.png", function() {}); + Scene.active.embedData("bnoise_sobol.k", function() {}); + Scene.active.embedData("bnoise_scramble.k", function() {}); + Scene.active.embedData("bnoise_rank.k", function() {}); } iron.data.Data.getBlob(shaderName, function(shader: kha.Blob) { if (build) buildData(); - var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.png"); - var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.png"); - var bnoise_rank = Scene.active.embedded.get("bnoise_rank.png"); + var bnoise_sobol = Scene.active.embedded.get("bnoise_sobol.k"); + var bnoise_scramble = Scene.active.embedded.get("bnoise_scramble.k"); + var bnoise_rank = Scene.active.embedded.get("bnoise_rank.k"); Krom.raytraceInit(shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer); }); } diff --git a/Sources/arm/ui/TabBrushes.hx b/Sources/arm/ui/TabBrushes.hx index 70fc34ac..dc0b217d 100644 --- a/Sources/arm/ui/TabBrushes.hx +++ b/Sources/arm/ui/TabBrushes.hx @@ -57,7 +57,7 @@ class TabBrushes { //var uix = ui._x; //var uiy = ui._y; var tile = ui.SCALE() > 1 ? 100 : 50; - var state = Project.brushes[i].previewReady ? ui.image(img) : ui.image(Res.get("icons.png"), -1, null, tile, tile, tile, tile); + var state = Project.brushes[i].previewReady ? ui.image(img) : ui.image(Res.get("icons.k"), -1, null, tile, tile, tile, tile); if (state == State.Started) { if (Context.brush != Project.brushes[i]) Context.selectBrush(i); if (Time.time() - UITrait.inst.selectTime < 0.25) UITrait.inst.showBrushNodes(); diff --git a/Sources/arm/ui/TabLayers.hx b/Sources/arm/ui/TabLayers.hx index b65c74b6..474244a4 100644 --- a/Sources/arm/ui/TabLayers.hx +++ b/Sources/arm/ui/TabLayers.hx @@ -82,7 +82,7 @@ class TabLayers { var center = (step / 2) * ui.SCALE(); ui._y += center; - var icons = Res.get("icons.png"); + var icons = Res.get("icons.k"); var r = Res.tile18(icons, l.visible ? 0 : 1, 0); ui._x += 2; ui._y += 3; diff --git a/Sources/arm/ui/TabMaterials.hx b/Sources/arm/ui/TabMaterials.hx index 20dacf8d..ce1a8f29 100644 --- a/Sources/arm/ui/TabMaterials.hx +++ b/Sources/arm/ui/TabMaterials.hx @@ -96,7 +96,7 @@ class TabMaterials { var uix = ui._x; var uiy = ui._y; var tile = ui.SCALE() > 1 ? 100 : 50; - var state = materials[i].previewReady ? ui.image(img) : ui.image(Res.get("icons.png"), -1, null, tile, tile, tile, tile); + var state = materials[i].previewReady ? ui.image(img) : ui.image(Res.get("icons.k"), -1, null, tile, tile, tile, tile); if (state == State.Started && ui.inputY > ui._windowY) { if (getSelectedMaterial() != materials[i]) selectMaterial(i); var mouse = Input.getMouse(); diff --git a/Sources/arm/ui/TabTextures.hx b/Sources/arm/ui/TabTextures.hx index 5ddf62d4..0c2b3fa7 100644 --- a/Sources/arm/ui/TabTextures.hx +++ b/Sources/arm/ui/TabTextures.hx @@ -125,7 +125,7 @@ class TabTextures { } } else { - var img = Res.get("icons.png"); + var img = Res.get("icons.k"); var imgw = ui.SCALE() > 1 ? 100 : 50; ui.image(img, ui.t.BUTTON_COL, imgw, 0, imgw, imgw, imgw); if (ui.isHovered) ui.tooltip("Drag and drop files here"); diff --git a/Sources/arm/ui/UIMenu.hx b/Sources/arm/ui/UIMenu.hx index c144701e..3946af7c 100644 --- a/Sources/arm/ui/UIMenu.hx +++ b/Sources/arm/ui/UIMenu.hx @@ -31,6 +31,7 @@ class UIMenu { static var showMenuFirst = true; static var hideMenu = false; static var viewportColorHandle = Id.handle({selected: false}); + static var envmapLoaded = false; @:access(zui.Zui) public static function render(g: kha.graphics2.Graphics) { @@ -181,6 +182,11 @@ class UIMenu { UITrait.inst.showEnvmap = ui.check(UITrait.inst.showEnvmapHandle, "Envmap"); if (UITrait.inst.showEnvmapHandle.changed) { var world = Scene.active.world; + if (!envmapLoaded) { + // TODO: Unable to share texture for both radiance and envmap - reload image + envmapLoaded = true; + iron.data.Data.cachedImages.remove("World_radiance.k"); + } world.loadEnvmap(function(_) {}); if (UITrait.inst.savedEnvmap == null) UITrait.inst.savedEnvmap = world.envmap; Context.ddirty = 2; diff --git a/Sources/arm/ui/UINodes.hx b/Sources/arm/ui/UINodes.hx index 655d1433..16eebd64 100644 --- a/Sources/arm/ui/UINodes.hx +++ b/Sources/arm/ui/UINodes.hx @@ -167,15 +167,21 @@ class UINodes { } public function canvasChanged() { + #if (!kha_direct3d12) if (Layers.isFillMaterial()) { - Layers.updateFillLayers(); // TODO: jitter + Layers.updateFillLayers(); // TODO: only used as jitter UITrait.inst.hwnd.redraws = 2; } - MaterialParser.parsePaintMaterial(); - RenderUtil.makeMaterialPreview(); - UITrait.inst.hwnd1.redraws = 2; - var decal = Context.tool == ToolDecal || Context.tool == ToolText; - if (decal) RenderUtil.makeDecalPreview(); + #end + function _parse(_) { + MaterialParser.parsePaintMaterial(); + RenderUtil.makeMaterialPreview(); + UITrait.inst.hwnd1.redraws = 2; + var decal = Context.tool == ToolDecal || Context.tool == ToolText; + if (decal) RenderUtil.makeDecalPreview(); + iron.App.removeRender(_parse); + } + iron.App.notifyOnRender(_parse); } function nodeSearch(x = -1, y = -1, done: Void->Void = null) { diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 68915a99..0902e980 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -370,7 +370,7 @@ class UITrait { Zui.onBorderHover = onBorderHover; Zui.onTextHover = onTextHover; - var resources = ["cursor.png", "icons.png"]; + var resources = ["cursor.k", "icons.k"]; Res.load(resources, done); projectObjects = []; @@ -782,7 +782,7 @@ class UITrait { g.drawImage(img, mx + 10, my + 10); } - var cursorImg = Res.get("cursor.png"); + var cursorImg = Res.get("cursor.k"); var psize = Std.int(cursorImg.width * (brushRadius * brushNodesRadius)); // Clone source cursor @@ -870,7 +870,7 @@ class UITrait { if (worktab.position == SpacePaint) { var keys = ["(B)", "(E)", "(G)", "(D)", "(T)", "(L) - Hold ALT to set source", "(U)", "(P)", "(K)", "(C)", "(V)"]; - var img = Res.get("icons.png"); + var img = Res.get("icons.k"); var imgw = ui.SCALE() > 1 ? 100 : 50; for (i in 0...toolNames.length) { ui._x += 2; @@ -882,7 +882,7 @@ class UITrait { } } else if (worktab.position == SpaceScene) { - var img = Res.get("icons.png"); + var img = Res.get("icons.k"); var imgw = ui.SCALE() > 1 ? 100 : 50; ui._x += 2; if (Context.tool == ToolGizmo) ui.rect(-1, -1, 50 + 2, 50 + 2, ui.t.HIGHLIGHT_COL, 2); @@ -1236,12 +1236,12 @@ class UITrait { public function setIconScale() { if (ui.SCALE() > 1) { - Res.load(["icons2x.png"], function() { - @:privateAccess Res.bundled.set("icons.png", Res.get("icons2x.png")); + Res.load(["icons2x.k"], function() { + @:privateAccess Res.bundled.set("icons.k", Res.get("icons2x.k")); }); } else { - Res.load(["icons.png"], function() {}); + Res.load(["icons.k"], function() {}); } } diff --git a/Sources/arm/ui/UIView2D.hx b/Sources/arm/ui/UIView2D.hx index d5c93e0f..752584ab 100644 --- a/Sources/arm/ui/UIView2D.hx +++ b/Sources/arm/ui/UIView2D.hx @@ -174,7 +174,7 @@ class UIView2D { } if (Context.tool == ToolPicker) { - var cursorImg = Res.get("cursor.png"); + var cursorImg = Res.get("cursor.k"); ui.g.drawScaledImage(cursorImg, tx + tw * UITrait.inst.uvxPicked - 16, ty + th * UITrait.inst.uvyPicked - 16, 32, 32); } }