From 4192dc677649ee0b2b0804dcaacf2ee37a15f12d Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 5 Dec 2019 22:56:37 +0100 Subject: [PATCH] Forward fixes --- Sources/arm/render/RenderPathForward.hx | 23 +++++++++++++++++++---- Sources/arm/render/Uniforms.hx | 2 +- Sources/arm/ui/UITrait.hx | 10 +++++----- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Sources/arm/render/RenderPathForward.hx b/Sources/arm/render/RenderPathForward.hx index e6031708..36ffaf42 100644 --- a/Sources/arm/render/RenderPathForward.hx +++ b/Sources/arm/render/RenderPathForward.hx @@ -136,12 +136,23 @@ class RenderPathForward { Scene.active.camera.buildMatrix(); RenderPathPaint.begin(); + drawSplit(); - - RenderPathPaint.draw(); - #end // arm_painter + drawGbuffer(); + + #if arm_painter + RenderPathPaint.draw(); + #end + + #if kha_direct3d12 + if (UITrait.inst.viewportMode == 10) { // Ray-traced + RenderPathRaytrace.draw(); + return; + } + #end + drawForward(); #if arm_painter @@ -152,7 +163,7 @@ class RenderPathForward { RenderPathDeferred.taaFrame++; } - static function drawForward() { + static function drawGbuffer() { path.setTarget("gbuffer0"); path.clearTarget(null, 1.0); path.setTarget("gbuffer2"); @@ -162,7 +173,9 @@ class RenderPathForward { RenderPathPaint.bindLayers(); #end path.drawMeshes("mesh"); + } + static function drawForward() { path.setDepthFrom("gbuffer1", "gbuffer0"); path.setTarget("gbuffer1"); path.drawSkydome("world_pass/world_pass/world_pass"); @@ -241,6 +254,8 @@ class RenderPathForward { cam.buildMatrix(); cam.buildProjection(); + drawGbuffer(); + #if kha_direct3d12 UITrait.inst.viewportMode == 10 ? RenderPathRaytrace.draw() : drawForward(); #else diff --git a/Sources/arm/render/Uniforms.hx b/Sources/arm/render/Uniforms.hx index 99530e7d..b73d8de5 100644 --- a/Sources/arm/render/Uniforms.hx +++ b/Sources/arm/render/Uniforms.hx @@ -280,7 +280,7 @@ class Uniforms { public static function linkTex(object:Object, mat:MaterialData, link:String):kha.Image { #if arm_painter if (link == "_texcolorid") { - if (Project.assets.length == 0) return null; + if (Project.assets.length == 0) return RenderPath.active.renderTargets.get("empty_white").image; else return UITrait.inst.getImage(Project.assets[UITrait.inst.colorIdHandle.position]); } if (link == "_texuvmap") { diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 998e60ca..6ce5da97 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -1158,13 +1158,13 @@ class UITrait { #end UITrait.inst.viewportMode = ui.combo(modeHandle, modes, "Mode"); if (modeHandle.changed) { - var forward = UITrait.inst.viewportMode != 0 && UITrait.inst.viewportMode != 10; - if (forward) { - if (RenderPathForward.path == null) RenderPathForward.init(RenderPath.active); - RenderPath.active.commands = RenderPathForward.commands; + var deferred = UITrait.inst.viewportMode == 0 || UITrait.inst.viewportMode == 10; + if (deferred) { + RenderPath.active.commands = RenderPathDeferred.commands; } else { - RenderPath.active.commands = RenderPathDeferred.commands; + if (RenderPathForward.path == null) RenderPathForward.init(RenderPath.active); + RenderPath.active.commands = RenderPathForward.commands; } MaterialParser.parseMeshMaterial(); }