diff --git a/Sources/arm/App.hx b/Sources/arm/App.hx index 4995890b..2b499aa4 100644 --- a/Sources/arm/App.hx +++ b/Sources/arm/App.hx @@ -54,6 +54,8 @@ class App { public static var uimenu: Zui; public static var fileArg = ""; public static var ELEMENT_H = 28; + public static var resHandle = new Handle({position: Res2048}); + public static var bitsHandle = new Handle(); public function new() { Log.init(); diff --git a/Sources/arm/Config.hx b/Sources/arm/Config.hx index e798fd66..18e1bf75 100644 --- a/Sources/arm/Config.hx +++ b/Sources/arm/Config.hx @@ -170,28 +170,26 @@ class Config { } public static function getTextureRes(): Int { - var resHandle = UITrait.inst.resHandle; - if (resHandle.position == Res128) return 128; - if (resHandle.position == Res256) return 256; - if (resHandle.position == Res512) return 512; - if (resHandle.position == Res1024) return 1024; - if (resHandle.position == Res2048) return 2048; - if (resHandle.position == Res4096) return 4096; - if (resHandle.position == Res8192) return 8192; - if (resHandle.position == Res16384) return 16384; + if (App.resHandle.position == Res128) return 128; + if (App.resHandle.position == Res256) return 256; + if (App.resHandle.position == Res512) return 512; + if (App.resHandle.position == Res1024) return 1024; + if (App.resHandle.position == Res2048) return 2048; + if (App.resHandle.position == Res4096) return 4096; + if (App.resHandle.position == Res8192) return 8192; + if (App.resHandle.position == Res16384) return 16384; return 0; } public static function getTextureResBias(): Float { - var resHandle = UITrait.inst.resHandle; - if (resHandle.position == Res128) return 16.0; - if (resHandle.position == Res256) return 8.0; - if (resHandle.position == Res512) return 4.0; - if (resHandle.position == Res1024) return 2.0; - if (resHandle.position == Res2048) return 1.5; - if (resHandle.position == Res4096) return 1.0; - if (resHandle.position == Res8192) return 0.5; - if (resHandle.position == Res16384) return 0.25; + if (App.resHandle.position == Res128) return 16.0; + if (App.resHandle.position == Res256) return 8.0; + if (App.resHandle.position == Res512) return 4.0; + if (App.resHandle.position == Res1024) return 2.0; + if (App.resHandle.position == Res2048) return 1.5; + if (App.resHandle.position == Res4096) return 1.0; + if (App.resHandle.position == Res8192) return 0.5; + if (App.resHandle.position == Res16384) return 0.25; return 1.0; } diff --git a/Sources/arm/Layers.hx b/Sources/arm/Layers.hx index b4cf4edd..87d735e1 100644 --- a/Sources/arm/Layers.hx +++ b/Sources/arm/Layers.hx @@ -78,7 +78,7 @@ class Layers { public static function resizeLayers(g: kha.graphics4.Graphics) { var C = Config.raw; - if (UITrait.inst.resHandle.position >= 4) { // Save memory for >=16k + if (App.resHandle.position >= 4) { // Save memory for >=16k C.undo_steps = 2; if (UITrait.inst.undoHandle != null) UITrait.inst.undoHandle.value = C.undo_steps; while (History.undoLayers.length > C.undo_steps) { var l = History.undoLayers.pop(); l.unload(); } diff --git a/Sources/arm/data/LayerSlot.hx b/Sources/arm/data/LayerSlot.hx index e021b1c6..8470c2f1 100644 --- a/Sources/arm/data/LayerSlot.hx +++ b/Sources/arm/data/LayerSlot.hx @@ -25,8 +25,6 @@ class LayerSlot { public var maskOpacity = 1.0; // Opacity mask public var material_mask: MaterialSlot = null; // Fill layer - static var first = true; - public var blending = BlendMix; public var objectMask = 0; public var uvScale = 1.0; @@ -46,37 +44,17 @@ class LayerSlot { var createMaskImage: Image; public function new(ext = "") { - - if (first) { - first = false; - { - var t = new RenderTargetRaw(); - t.name = "texpaint_blend0"; - t.width = Config.getTextureRes(); - t.height = Config.getTextureRes(); - t.format = "R8"; - RenderPath.active.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "texpaint_blend1"; - t.width = Config.getTextureRes(); - t.height = Config.getTextureRes(); - t.format = "R8"; - RenderPath.active.createRenderTarget(t); - } - } - if (ext == "") { id = 0; for (l in Project.layers) if (l.id >= id) id = l.id + 1; ext = id + ""; } + this.ext = ext; name = "Layer " + (id + 1); - var format = UITrait.inst.bitsHandle.position == Bits8 ? "RGBA32" : - UITrait.inst.bitsHandle.position == Bits16 ? "RGBA64" : - "RGBA128"; + var format = App.bitsHandle.position == Bits8 ? "RGBA32" : + App.bitsHandle.position == Bits16 ? "RGBA64" : + "RGBA128"; { var t = new RenderTargetRaw(); @@ -288,9 +266,9 @@ class LayerSlot { } public function resizeAndSetBits() { - var format = UITrait.inst.bitsHandle.position == Bits8 ? TextureFormat.RGBA32 : - UITrait.inst.bitsHandle.position == Bits16 ? TextureFormat.RGBA64 : - TextureFormat.RGBA128; + var format = App.bitsHandle.position == Bits8 ? TextureFormat.RGBA32 : + App.bitsHandle.position == Bits16 ? TextureFormat.RGBA64 : + TextureFormat.RGBA128; var res = Config.getTextureRes(); var rts = RenderPath.active.renderTargets; diff --git a/Sources/arm/io/ExportArm.hx b/Sources/arm/io/ExportArm.hx index c3dec70d..e7e106d7 100644 --- a/Sources/arm/io/ExportArm.hx +++ b/Sources/arm/io/ExportArm.hx @@ -41,7 +41,7 @@ class ExportArm { var texture_files = assetsToFiles(); var mesh_files = meshesToFiles(); - var bitsPos = UITrait.inst.bitsHandle.position; + var bitsPos = App.bitsHandle.position; var bpp = bitsPos == Bits8 ? 8 : bitsPos == Bits16 ? 16 : 32; var ld: Array = []; diff --git a/Sources/arm/io/ExportTexture.hx b/Sources/arm/io/ExportTexture.hx index 14b88307..0dd24e3d 100644 --- a/Sources/arm/io/ExportTexture.hx +++ b/Sources/arm/io/ExportTexture.hx @@ -50,7 +50,7 @@ class ExportTexture { var f = UIFiles.filename; if (f == "") f = "untitled"; var formatType = UITrait.inst.formatType; - var bits = UITrait.inst.bitsHandle.position == Bits8 ? 8 : 16; + var bits = App.bitsHandle.position == Bits8 ? 8 : 16; var ext = bits == 16 ? ".exr" : formatType == FormatPng ? ".png" : ".jpg"; if (f.endsWith(ext)) f = f.substr(0, f.length - 4); ext = udimTile + ext; @@ -227,7 +227,7 @@ class ExportTexture { static function writeTexture(file: String, pixels: Bytes, type = 1, off = 0) { var out = new BytesOutput(); var res = Config.getTextureRes(); - var bitsHandle = UITrait.inst.bitsHandle.position; + var bitsHandle = App.bitsHandle.position; var bits = bitsHandle == Bits8 ? 8 : bitsHandle == Bits16 ? 16 : 32; if (bits > 8) { // 16/32bit var writer = new ExrWriter(out, res, res, pixels, bits, type, off); diff --git a/Sources/arm/io/ImportArm.hx b/Sources/arm/io/ImportArm.hx index 082ac903..506459c2 100644 --- a/Sources/arm/io/ImportArm.hx +++ b/Sources/arm/io/ImportArm.hx @@ -181,10 +181,10 @@ class ImportArm { Context.mergedObject.visible = true; var l0 = project.layer_datas[0]; - UITrait.inst.resHandle.position = Config.getTextureResPos(l0.res); + App.resHandle.position = Config.getTextureResPos(l0.res); if (l0.bpp == null) l0.bpp = 8; // TODO: deprecated var bitsPos = l0.bpp == 8 ? Bits8 : l0.bpp == 16 ? Bits16 : Bits32; - UITrait.inst.bitsHandle.position = bitsPos; + App.bitsHandle.position = bitsPos; var bytesPerPixel = Std.int(l0.bpp / 8); var format = l0.bpp == 8 ? TextureFormat.RGBA32 : l0.bpp == 16 ? TextureFormat.RGBA64 : TextureFormat.RGBA128; diff --git a/Sources/arm/render/Inc.hx b/Sources/arm/render/Inc.hx index db35a277..dcc5c41d 100644 --- a/Sources/arm/render/Inc.hx +++ b/Sources/arm/render/Inc.hx @@ -42,7 +42,6 @@ class Inc { } path.resize(); } - // Init voxels #if rp_voxelao if (!voxelsCreated) initGI(); #end @@ -80,7 +79,6 @@ class Inc { } #end } - #end public static inline function getVoxelRes(): Int { return 256; @@ -89,6 +87,7 @@ class Inc { public static inline function getVoxelResZ(): Float { return 1.0; } + #end public static inline function getSuperSampling(): Float { return superSample; @@ -162,7 +161,9 @@ class Inc { UITrait.inst.viewIndex = -1; } - public static inline function ssaa4(): Bool { return Config.raw.rp_supersample == 4; } + public static inline function ssaa4(): Bool { + return Config.raw.rp_supersample == 4; + } public static function isCached(): Bool { #if (!arm_creator) diff --git a/Sources/arm/render/RenderPathDeferred.hx b/Sources/arm/render/RenderPathDeferred.hx index c5caf012..d2fed9eb 100644 --- a/Sources/arm/render/RenderPathDeferred.hx +++ b/Sources/arm/render/RenderPathDeferred.hx @@ -22,19 +22,9 @@ class RenderPathDeferred { public static function init(_path: RenderPath) { path = _path; - - path.loadShader("world_pass/world_pass/world_pass"); - - #if rp_voxelao - { - Inc.initGI(); - path.loadShader("deferred_light/deferred_light/deferred_light_voxel"); - } - #end + path.createDepthBuffer("main", "DEPTH24"); { - path.createDepthBuffer("main", "DEPTH24"); - var t = new RenderTargetRaw(); t.name = "gbuffer0"; t.width = 0; @@ -44,7 +34,24 @@ class RenderPathDeferred { t.depth_buffer = "main"; path.createRenderTarget(t); } - + { + var t = new RenderTargetRaw(); + t.name = "gbuffer1"; + t.width = 0; + t.height = 0; + t.format = "RGBA64"; + t.scale = Inc.getSuperSampling(); + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "gbuffer2"; + t.width = 0; + t.height = 0; + t.format = "RGBA64"; + t.scale = Inc.getSuperSampling(); + path.createRenderTarget(t); + } { var t = new RenderTargetRaw(); t.name = "tex"; @@ -55,77 +62,15 @@ class RenderPathDeferred { t.depth_buffer = "main"; path.createRenderTarget(t); } - { var t = new RenderTargetRaw(); t.name = "buf"; t.width = 0; t.height = 0; - #if kha_direct3d12 // Match raytrace_target format - t.format = "RGBA128"; - #else - t.format = "RGBA64"; - #end + t.format = "RGBA64"; // Match raytrace_target format t.scale = Inc.getSuperSampling(); path.createRenderTarget(t); } - - { - var t = new RenderTargetRaw(); - t.name = "gbuffer1"; - t.width = 0; - t.height = 0; - t.format = "RGBA64"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - - { - var t = new RenderTargetRaw(); - t.name = "gbuffer2"; - t.width = 0; - t.height = 0; - t.format = "RGBA64"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - - { - var t = new RenderTargetRaw(); - t.name = "taa"; - t.width = 0; - t.height = 0; - t.format = "RGBA32"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - - path.loadShader("deferred_light/deferred_light/deferred_light"); - - { - path.loadShader("shader_datas/ssgi_pass/ssgi_pass"); - path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_x"); - path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_y"); - } - { - var t = new RenderTargetRaw(); - t.name = "singlea"; - t.width = 0; - t.height = 0; - t.format = "R8"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "singleb"; - t.width = 0; - t.height = 0; - t.format = "R8"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - { var t = new RenderTargetRaw(); t.name = "bufa"; @@ -137,74 +82,22 @@ class RenderPathDeferred { } { var t = new RenderTargetRaw(); - t.name = "bufb"; + t.name = "taa"; t.width = 0; t.height = 0; t.format = "RGBA32"; t.scale = Inc.getSuperSampling(); path.createRenderTarget(t); } - - { - path.loadShader("shader_datas/compositor_pass/compositor_pass"); - } - - { - path.loadShader("shader_datas/copy_pass/copy_pass"); - } - - { - path.loadShader("shader_datas/smaa_edge_detect/smaa_edge_detect"); - path.loadShader("shader_datas/smaa_blend_weight/smaa_blend_weight"); - path.loadShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend"); - path.loadShader("shader_datas/taa_pass/taa_pass"); - } - - { - path.loadShader("shader_datas/supersample_resolve/supersample_resolve"); - } - - #if arm_world - { - path.loadShader("water_pass/water_pass/water_pass"); - path.loadShader("shader_datas/copy_pass/copy_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("clouds_base.raw", function() {}); - Scene.active.embedData("clouds_detail.raw", function() {}); - Scene.active.embedData("clouds_map.png", function() {}); - } - #end - { var t = new RenderTargetRaw(); - t.name = "bloomtex"; + t.name = "taa2"; t.width = 0; t.height = 0; - t.scale = 0.25; - t.format = "RGBA64"; + t.format = "RGBA32"; + t.scale = Inc.getSuperSampling(); path.createRenderTarget(t); } - - { - var t = new RenderTargetRaw(); - t.name = "bloomtex2"; - t.width = 0; - t.height = 0; - t.scale = 0.25; - t.format = "RGBA64"; - path.createRenderTarget(t); - } - - { - path.loadShader("shader_datas/bloom_pass/bloom_pass"); - path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x"); - path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y"); - path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y_blend"); - } - #if rp_autoexposure { var t = new RenderTargetRaw(); @@ -214,32 +107,10 @@ class RenderPathDeferred { t.format = "RGBA64"; path.createRenderTarget(t); } - { path.loadShader("shader_datas/histogram_pass/histogram_pass"); } #end - - { - path.loadShader("shader_datas/ssr_pass/ssr_pass"); - path.loadShader("shader_datas/blur_adaptive_pass/blur_adaptive_pass_x"); - path.loadShader("shader_datas/blur_adaptive_pass/blur_adaptive_pass_y3_blend"); - } - - #if ((rp_motionblur == "Camera") || (rp_motionblur == "Object")) - { - #if (rp_motionblur == "Camera") - { - path.loadShader("shader_datas/motion_blur_pass/motion_blur_pass"); - } - #else - { - path.loadShader("shader_datas/motion_blur_veloc_pass/motion_blur_veloc_pass"); - } - #end - } - #end - { var t = new RenderTargetRaw(); t.name = "empty_white"; @@ -253,15 +124,45 @@ class RenderPathDeferred { path.renderTargets.set(t.name, rt); } + path.loadShader("world_pass/world_pass/world_pass"); + path.loadShader("deferred_light/deferred_light/deferred_light"); + path.loadShader("shader_datas/compositor_pass/compositor_pass"); + path.loadShader("shader_datas/copy_pass/copy_pass"); + path.loadShader("shader_datas/smaa_edge_detect/smaa_edge_detect"); + path.loadShader("shader_datas/smaa_blend_weight/smaa_blend_weight"); + path.loadShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend"); + path.loadShader("shader_datas/taa_pass/taa_pass"); + path.loadShader("shader_datas/supersample_resolve/supersample_resolve"); + + #if arm_world { - var t = new RenderTargetRaw(); - t.name = "taa2"; - t.width = 0; - t.height = 0; - t.format = "RGBA32"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); + 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("clouds_base.raw", function() {}); + Scene.active.embedData("clouds_detail.raw", function() {}); + Scene.active.embedData("clouds_map.png", function() {}); } + #end + + #if (rp_motionblur == "Camera") + { + path.loadShader("shader_datas/motion_blur_pass/motion_blur_pass"); + } + #end + #if (rp_motionblur == "Object") + { + path.loadShader("shader_datas/motion_blur_veloc_pass/motion_blur_veloc_pass"); + } + #end + #if rp_voxelao + { + Inc.initGI(); + path.loadShader("deferred_light/deferred_light/deferred_light_voxel"); + } + #end #if arm_painter RenderPathPaint.init(path); @@ -331,6 +232,30 @@ class RenderPathDeferred { var ssgi = Config.raw.rp_ssgi != false && cameraType == CameraPerspective; if (ssgi && ddirty > 0 && taaFrame > 0) { + if (path.renderTargets.get("singlea") == null) { + { + var t = new RenderTargetRaw(); + t.name = "singlea"; + t.width = 0; + t.height = 0; + t.format = "R8"; + t.scale = Inc.getSuperSampling(); + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "singleb"; + t.width = 0; + t.height = 0; + t.format = "R8"; + t.scale = Inc.getSuperSampling(); + path.createRenderTarget(t); + } + path.loadShader("shader_datas/ssgi_pass/ssgi_pass"); + path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_x"); + path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_y"); + } + path.setTarget("singlea"); path.bindTarget("_main", "gbufferD"); path.bindTarget("gbuffer0", "gbuffer0"); @@ -458,6 +383,32 @@ class RenderPathDeferred { #end if (Config.raw.rp_bloom != false) { + + if (path.renderTargets.get("bloomtex") == null) { + { + var t = new RenderTargetRaw(); + t.name = "bloomtex"; + t.width = 0; + t.height = 0; + t.scale = 0.25; + t.format = "RGBA64"; + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "bloomtex2"; + t.width = 0; + t.height = 0; + t.scale = 0.25; + t.format = "RGBA64"; + path.createRenderTarget(t); + } + path.loadShader("shader_datas/bloom_pass/bloom_pass"); + path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_x"); + path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y"); + path.loadShader("shader_datas/blur_gaus_pass/blur_gaus_pass_y_blend"); + } + path.setTarget("bloomtex"); path.bindTarget("tex", "tex"); path.drawShader("shader_datas/bloom_pass/bloom_pass"); @@ -496,6 +447,11 @@ class RenderPathDeferred { } if (Config.raw.rp_ssr != false) { + if (@:privateAccess path.cachedShaderContexts.get("shader_datas/ssr_pass/ssr_pass") == null) { + path.loadShader("shader_datas/ssr_pass/ssr_pass"); + path.loadShader("shader_datas/blur_adaptive_pass/blur_adaptive_pass_x"); + path.loadShader("shader_datas/blur_adaptive_pass/blur_adaptive_pass_y3_blend"); + } var targeta = "buf"; var targetb = "gbuffer1"; @@ -577,14 +533,14 @@ class RenderPathDeferred { path.bindTarget("buf", "colorTex"); path.drawShader("shader_datas/smaa_edge_detect/smaa_edge_detect"); - path.setTarget("bufb"); + path.setTarget("taa"); path.clearTarget(0x00000000); path.bindTarget(current, "edgesTex"); path.drawShader("shader_datas/smaa_blend_weight/smaa_blend_weight"); path.setTarget(current); path.bindTarget("buf", "colorTex"); - path.bindTarget("bufb", "blendTex"); + path.bindTarget("taa", "blendTex"); path.bindTarget("gbuffer2", "sveloc"); path.drawShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend"); diff --git a/Sources/arm/render/RenderPathForward.hx b/Sources/arm/render/RenderPathForward.hx index c2dc2949..ce1c4fc5 100644 --- a/Sources/arm/render/RenderPathForward.hx +++ b/Sources/arm/render/RenderPathForward.hx @@ -68,15 +68,6 @@ class RenderPathForward { // t.scale = Inc.getSuperSampling(); // path.createRenderTarget(t); // } - // { - // var t = new RenderTargetRaw(); - // t.name = "bufb"; - // t.width = 0; - // t.height = 0; - // t.format = "RGBA32"; - // t.scale = Inc.getSuperSampling(); - // path.createRenderTarget(t); - // } // path.loadShader("shader_datas/smaa_edge_detect/smaa_edge_detect"); // path.loadShader("shader_datas/smaa_blend_weight/smaa_blend_weight"); @@ -177,14 +168,14 @@ class RenderPathForward { path.bindTarget("buf", "colorTex"); path.drawShader("shader_datas/smaa_edge_detect/smaa_edge_detect"); - path.setTarget("bufb"); + path.setTarget("taa"); path.clearTarget(0x00000000); path.bindTarget(current, "edgesTex"); path.drawShader("shader_datas/smaa_blend_weight/smaa_blend_weight"); path.setTarget(current); path.bindTarget("buf", "colorTex"); - path.bindTarget("bufb", "blendTex"); + path.bindTarget("taa", "blendTex"); path.bindTarget("gbuffer2", "sveloc"); path.drawShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend"); diff --git a/Sources/arm/render/RenderPathPaint.hx b/Sources/arm/render/RenderPathPaint.hx index 746b8163..5e83b872 100644 --- a/Sources/arm/render/RenderPathPaint.hx +++ b/Sources/arm/render/RenderPathPaint.hx @@ -30,6 +30,22 @@ class RenderPathPaint { public static function init(_path: RenderPath) { path = _path; + { + var t = new RenderTargetRaw(); + t.name = "texpaint_blend0"; + t.width = Config.getTextureRes(); + t.height = Config.getTextureRes(); + t.format = "R8"; + path.createRenderTarget(t); + } + { + var t = new RenderTargetRaw(); + t.name = "texpaint_blend1"; + t.width = Config.getTextureRes(); + t.height = Config.getTextureRes(); + t.format = "R8"; + path.createRenderTarget(t); + } { var t = new RenderTargetRaw(); t.name = "texpaint_colorid"; @@ -38,7 +54,6 @@ class RenderPathPaint { t.format = "RGBA32"; path.createRenderTarget(t); } - { var t = new RenderTargetRaw(); t.name = "texpaint_picker"; @@ -209,7 +224,7 @@ class RenderPathPaint { t.width = Std.int(Config.getTextureRes() * 0.95); t.height = Std.int(Config.getTextureRes() * 0.95); t.format = "RGBA32"; - RenderPath.active.createRenderTarget(t); + path.createRenderTarget(t); } var blurs = Math.round(UITrait.inst.bakeCurvSmooth); for (i in 0...blurs) { diff --git a/Sources/arm/render/RenderPathPreview.hx b/Sources/arm/render/RenderPathPreview.hx index 72233668..be1b93b8 100644 --- a/Sources/arm/render/RenderPathPreview.hx +++ b/Sources/arm/render/RenderPathPreview.hx @@ -43,16 +43,6 @@ class RenderPathPreview { path.createRenderTarget(t); } - { - var t = new RenderTargetRaw(); - t.name = "mbuf"; - t.width = RenderUtil.matPreviewSize; - t.height = RenderUtil.matPreviewSize; - t.format = "RGBA64"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - { var t = new RenderTargetRaw(); t.name = "mgbuffer0"; @@ -84,25 +74,6 @@ class RenderPathPreview { path.createRenderTarget(t); } - { - var t = new RenderTargetRaw(); - t.name = "mbufa"; - t.width = RenderUtil.matPreviewSize; - t.height = RenderUtil.matPreviewSize; - t.format = "RGBA32"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "mbufb"; - t.width = RenderUtil.matPreviewSize; - t.height = RenderUtil.matPreviewSize; - t.format = "RGBA32"; - t.scale = Inc.getSuperSampling(); - path.createRenderTarget(t); - } - // // path.loadShader("deferred_light/deferred_light/deferred_light"); // path.loadShader("world_pass/world_pass/world_pass"); diff --git a/Sources/arm/render/RenderPathRaytrace.hx b/Sources/arm/render/RenderPathRaytrace.hx index 63805a51..3fbe6674 100644 --- a/Sources/arm/render/RenderPathRaytrace.hx +++ b/Sources/arm/render/RenderPathRaytrace.hx @@ -19,9 +19,6 @@ class RenderPathRaytrace { static var helpMat = iron.math.Mat4.identity(); static var vb: kha.arrays.Float32Array; static var ib: kha.arrays.Uint32Array; - static var bsobol: kha.Image; - static var bscramble: kha.Image; - static var brank: kha.Image; static var raysTimer = 0.0; static var raysCounter = 0; static var lastLayer: kha.Image = null; @@ -44,21 +41,11 @@ class RenderPathRaytrace { var probe = Scene.active.world.probe; var savedEnvmap = UITrait.inst.showEnvmapBlur ? probe.radianceMipmaps[0] : probe.radiance; - if (lastEnvmap != savedEnvmap) { - lastEnvmap = savedEnvmap; - lastLayer = null; - - var envrt = path.renderTargets.get("envrt").image; - envrt.g2.begin(false); - envrt.g2.drawScaledImage(savedEnvmap, 0, 0, envrt.width, envrt.height); - envrt.g2.end(); - } - var layer = Context.layer; - if (lastLayer != layer.texpaint) { + if (lastEnvmap != savedEnvmap || lastLayer != layer.texpaint) { + lastEnvmap = savedEnvmap; lastLayer = layer.texpaint; - var envrt = path.renderTargets.get("envrt").image; - Krom.raytraceSetTextures(layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_, envrt.renderTarget_); + Krom.raytraceSetTextures(layer.texpaint.renderTarget_, layer.texpaint_nor.renderTarget_, layer.texpaint_pack.renderTarget_, savedEnvmap.texture_); } var cam = Scene.active.camera; @@ -92,7 +79,6 @@ class RenderPathRaytrace { f32[21] = UITrait.inst.showEnvmap ? 1.0 : 0.0; var framebuffer = path.renderTargets.get("buf").image; - Krom.raytraceDispatchRays(framebuffer.renderTarget_, f32.buffer); if (Context.ddirty == 1 || Context.pdirty == 1) Context.rdirty = 4; @@ -137,7 +123,7 @@ class RenderPathRaytrace { t.name = "baketex2"; t.width = Config.getTextureRes(); t.height = Config.getTextureRes(); - t.format = "RGBA128"; // Match raytrace_target format + t.format = "RGBA64"; // Match raytrace_target format path.createRenderTarget(t); } @@ -151,7 +137,11 @@ class RenderPathRaytrace { path.drawMeshes("paint"); } UITrait.inst.bakeType = _bakeType; - // MaterialParser.parsePaintMaterial(); + function _render(_) { + MaterialParser.parsePaintMaterial(); + iron.App.removeRender(_render); + } + iron.App.notifyOnRender(_render); raytraceInit(getBakeShaderName(), Config.getTextureRes(), Config.getTextureRes()); @@ -172,14 +162,7 @@ class RenderPathRaytrace { var baketex0 = path.renderTargets.get("baketex0").image; var baketex1 = path.renderTargets.get("baketex1").image; - var baketex2 = path.renderTargets.get("baketex2").image; - var savedEnvmap = Scene.active.world.probe.radiance; - var envrt = path.renderTargets.get("envrt").image; - envrt.g2.begin(false); - envrt.g2.drawScaledImage(savedEnvmap, 0, 0, envrt.width, envrt.height); - envrt.g2.end(); - - Krom.raytraceSetTextures(baketex0.renderTarget_, baketex1.renderTarget_, Context.layer.texpaint.renderTarget_, envrt.renderTarget_); + Krom.raytraceSetTextures(baketex0.renderTarget_, baketex1.renderTarget_, Context.layer.texpaint.renderTarget_, savedEnvmap.texture_); } if (UITrait.inst.brushTime > 0) { @@ -220,51 +203,21 @@ class RenderPathRaytrace { } static function raytraceInit(shaderName: String, targetW: Int, targetH: Int, 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() {}); - - { - var t = new RenderTargetRaw(); - t.name = "bsobol"; - t.width = 256; - t.height = 256; - t.format = "RGBA32"; - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "bscramble"; - t.width = 128; - t.height = 1024; - t.format = "RGBA32"; - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "brank"; - t.width = 128; - t.height = 1024; - t.format = "RGBA32"; - path.createRenderTarget(t); - } - { - var t = new RenderTargetRaw(); - t.name = "envrt"; - t.width = 4096; - t.height = 2048; - t.format = "RGBA128"; - path.createRenderTarget(t); - } } 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"); Krom.raytraceInit( shader.bytes.getData(), untyped vb.buffer, untyped ib.buffer, targetW, targetH, - bsobol.renderTarget_, bscramble.renderTarget_, brank.renderTarget_); + bnoise_sobol.texture_, bnoise_scramble.texture_, bnoise_rank.texture_); }); } @@ -290,28 +243,6 @@ class RenderPathRaytrace { var indices = geom.indices[0]; ib = new kha.arrays.Uint32Array(indices.length); for (i in 0...indices.length) ib[i] = indices[i]; - - buildSobol(); - } - - static function buildSobol() { - 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"); - - bsobol = path.renderTargets.get("bsobol").image; - bscramble = path.renderTargets.get("bscramble").image; - brank = path.renderTargets.get("brank").image; - - bsobol.g2.begin(false); - bsobol.g2.drawImage(bnoise_sobol, 0, 0); - bsobol.g2.end(); - bscramble.g2.begin(false); - bscramble.g2.drawImage(bnoise_scramble, 0, 0); - bscramble.g2.end(); - brank.g2.begin(false); - brank.g2.drawImage(bnoise_rank, 0, 0); - brank.g2.end(); } static function getBakeShaderName(): String { diff --git a/Sources/arm/ui/BoxExport.hx b/Sources/arm/ui/BoxExport.hx index 191c26b0..0102ba3f 100644 --- a/Sources/arm/ui/BoxExport.hx +++ b/Sources/arm/ui/BoxExport.hx @@ -30,8 +30,8 @@ class BoxExport { if (ui.tab(htab, "Export Textures")) { ui.row([0.5, 0.5]); - ui.combo(UITrait.inst.resHandle, ["128", "256", "512", "1K", "2K", "4K", "8K", "16K"], "Res", true); - if (UITrait.inst.resHandle.changed) { + ui.combo(App.resHandle, ["128", "256", "512", "1K", "2K", "4K", "8K", "16K"], "Res", true); + if (App.resHandle.changed) { iron.App.notifyOnRender(Layers.resizeLayers); UVUtil.uvmap = null; UVUtil.uvmapCached = false; @@ -41,19 +41,19 @@ class BoxExport { arm.render.RenderPathRaytrace.ready = false; #end } - ui.combo(UITrait.inst.bitsHandle, ["8bit", "16bit", "32bit"], "Color", true); - if (UITrait.inst.bitsHandle.changed) { + ui.combo(App.bitsHandle, ["8bit", "16bit", "32bit"], "Color", true); + if (App.bitsHandle.changed) { iron.App.notifyOnRender(Layers.setLayerBits); } ui.row([0.5, 0.5]); - if (UITrait.inst.bitsHandle.position == Bits8) { + if (App.bitsHandle.position == Bits8) { UITrait.inst.formatType = ui.combo(Id.handle({position: UITrait.inst.formatType}), ["png", "jpg"], "Format", true); } else { UITrait.inst.formatType = ui.combo(Id.handle({position: UITrait.inst.formatType}), ["exr"], "Format", true); } - ui.enabled = UITrait.inst.formatType == FormatJpg && UITrait.inst.bitsHandle.position == Bits8; + ui.enabled = UITrait.inst.formatType == FormatJpg && App.bitsHandle.position == Bits8; UITrait.inst.formatQuality = ui.slider(Id.handle({value: UITrait.inst.formatQuality}), "Quality", 0.0, 100.0, true, 1); ui.enabled = true; ui.row([0.5, 0.5]); @@ -69,7 +69,7 @@ class BoxExport { } if (ui.button("Export")) { UIBox.show = false; - var filters = UITrait.inst.bitsHandle.position != Bits8 ? "exr" : UITrait.inst.formatType == FormatPng ? "png" : "jpg"; + var filters = App.bitsHandle.position != Bits8 ? "exr" : UITrait.inst.formatType == FormatPng ? "png" : "jpg"; UIFiles.show(filters, true, function(path: String) { UITrait.inst.textureExportPath = path; function export(_) { diff --git a/Sources/arm/ui/TabLayers.hx b/Sources/arm/ui/TabLayers.hx index 0a0f3b8e..b65c74b6 100644 --- a/Sources/arm/ui/TabLayers.hx +++ b/Sources/arm/ui/TabLayers.hx @@ -385,8 +385,8 @@ class TabLayers { MaterialParser.parseMeshMaterial(); } - ui.combo(UITrait.inst.resHandle, ["128", "256", "512", "1K", "2K", "4K", "8K", "16K"], "Res", true); - if (UITrait.inst.resHandle.changed) { + ui.combo(App.resHandle, ["128", "256", "512", "1K", "2K", "4K", "8K", "16K"], "Res", true); + if (App.resHandle.changed) { iron.App.notifyOnRender(Layers.resizeLayers); UVUtil.uvmap = null; UVUtil.uvmapCached = false; @@ -396,8 +396,8 @@ class TabLayers { arm.render.RenderPathRaytrace.ready = false; #end } - ui.combo(UITrait.inst.bitsHandle, ["8bit", "16bit", "32bit"], "Color", true); - if (UITrait.inst.bitsHandle.changed) { + ui.combo(App.bitsHandle, ["8bit", "16bit", "32bit"], "Color", true); + if (App.bitsHandle.changed) { iron.App.notifyOnRender(Layers.setLayerBits); } diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 441f342e..68915a99 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -206,8 +206,6 @@ class UITrait { public var symZ = false; public var showCompass = true; public var fillTypeHandle = new Handle(); - public var resHandle = new Handle({position: Res2048}); - public var bitsHandle = new Handle(); #if arm_creator public var projectType = ModelTessellatedPlane; #else @@ -994,11 +992,11 @@ class UITrait { bakeType = ui.combo(bakeHandle, bakes, "Bake"); if (bakeType == BakeNormalObject || bakeType == BakePosition || bakeType == BakeBentNormal) { var bakeUpAxisHandle = Id.handle({position: bakeUpAxis}); - bakeUpAxis = ui.combo(bakeUpAxisHandle, ["Z", "Y"], "Up Axis"); + bakeUpAxis = ui.combo(bakeUpAxisHandle, ["Z", "Y"], "Up Axis", true); } if (bakeType == BakeAO || bakeType == BakeCurvature) { var bakeAxisHandle = Id.handle({position: bakeAxis}); - bakeAxis = ui.combo(bakeAxisHandle, ["XYZ", "X", "Y", "Z", "-X", "-Y", "-Z"], "Axis"); + bakeAxis = ui.combo(bakeAxisHandle, ["XYZ", "X", "Y", "Z", "-X", "-Y", "-Z"], "Axis", true); } if (bakeType == BakeAO) { var strengthHandle = Id.handle({value: bakeAoStrength}); diff --git a/khafile.js b/khafile.js index 17cc1f5b..acf93394 100644 --- a/khafile.js +++ b/khafile.js @@ -10,9 +10,6 @@ project.addAssets("Assets/licenses/*", { notinlist: true, destination: "data/lic project.addAssets("Assets/plugins/*", { notinlist: true, destination: "data/plugins/{name}" }); project.addAssets("Assets/themes/*", { notinlist: true, destination: "data/themes/{name}" }); -project.addDefine('rp_voxelao'); -project.addDefine('arm_voxelgi_revox'); -project.addDefine('arm_ltc'); project.addDefine('arm_taa'); project.addDefine('arm_veloc'); project.addDefine('arm_particles'); @@ -50,6 +47,8 @@ if (raytrace) { } else { project.addAssets("Assets/readme/readme.txt", { notinlist: true, destination: "{name}" }); + project.addDefine('rp_voxelao'); + project.addDefine('arm_voxelgi_revox'); } if (process.platform === 'darwin') { @@ -100,6 +99,7 @@ if (build === 'painter') { project.addShaders("Shaders/painter/*.glsl", { noembed: false}); project.addAssets("Assets/painter/*", { notinlist: true, destination: "data/{name}" }); project.addDefine('kha_no_ogg'); + project.addDefine('arm_ltc'); } else { // player, creator project.addAssets("Assets/creator/*", { notinlist: true, destination: "data/{name}" });