Browse Source

[hide] Refactored editor-only editor passes

Clement Espeute 1 year ago
parent
commit
9a1bd3ef3e
2 changed files with 45 additions and 9 deletions
  1. 5 0
      h3d/scene/Renderer.hx
  2. 40 9
      h3d/scene/pbr/Renderer.hx

+ 5 - 0
h3d/scene/Renderer.hx

@@ -28,6 +28,11 @@ class Renderer extends hxd.impl.AnyProps {
 	var backToFront : h3d.pass.PassList -> Void;
 	var debugging = false;
 
+	#if editor
+	public var showEditorGuides = false;
+	public var showEditorOutlines = true;
+	#end
+
 	public var effects : Array<h3d.impl.RendererFX> = [];
 
 	public var renderMode : RenderMode = Default;

+ 40 - 9
h3d/scene/pbr/Renderer.hx

@@ -97,6 +97,11 @@ class Renderer extends h3d.scene.Renderer {
 	public var exposure(get,set) : Float;
 	var debugShadowMapIndex = 1;
 
+	#if editor
+	var outline = new h3d.pass.ScreenFx(new hide.Renderer.ScreenOutline());
+	var outlineBlur = new h3d.pass.Blur(4);
+	#end
+
 	static var ALPHA : hxsl.Output = Swiz(Value("output.color"),[W]);
 	var output = new h3d.pass.Output("default",[
 		Value("output.color"),
@@ -172,6 +177,10 @@ class Renderer extends h3d.scene.Renderer {
 			return output;
 		case "decal" #if MRT_low , "emissiveDecal" #end:
 			return decalsOutput;
+		#if editor
+		case "highlight", "highlightBack":
+			return defaultPass;
+		#end
 		}
 		return super.getPassByName(name);
 	}
@@ -243,7 +252,7 @@ class Renderer extends h3d.scene.Renderer {
 	function renderPass(p:h3d.pass.Output, passes, ?sort) {
 		if ( cullingDistanceFactor > 0.0 )
 			cullPassesWithDistance(passes, function(col) return col.inFrustum(ctx.camera.frustum));
-		else 
+		else
 			cullPasses(passes, function(col) return col.inFrustum(ctx.camera.frustum));
 		p.draw(passes, sort);
 		passes.reset();
@@ -400,6 +409,35 @@ class Renderer extends h3d.scene.Renderer {
 	}
 
 	function end() {
+		#if editor
+			switch( currentStep ) {
+				case MainDraw:
+				case AfterTonemapping:
+					if (showEditorGuides) {
+						renderPass(defaultPass, get("debuggeom"), backToFront);
+						renderPass(defaultPass, get("debuggeom_alpha"), backToFront);
+					}
+
+					if (showEditorOutlines) {
+						var outlineTex = allocTarget("outline", true);
+						ctx.engine.pushTarget(outlineTex);
+						clear(0);
+						draw("highlightBack");
+						draw("highlight");
+						ctx.engine.popTarget();
+						var outlineBlurTex = allocTarget("outlineBlur", false);
+						outline.pass.setBlendMode(Alpha);
+						outlineBlur.apply(ctx, outlineTex, outlineBlurTex);
+						outline.shader.texture = outlineBlurTex;
+						outline.render();
+					}
+				case Overlay:
+					renderPass(defaultPass, get("overlay"), backToFront);
+					renderPass(defaultPass, get("ui"), backToFront);
+				default:
+			}
+		#end
+
 		for( f in effects )
 			if( f.enabled )
 				f.end(this, currentStep);
@@ -699,10 +737,7 @@ class Renderer extends h3d.scene.Renderer {
 				debugging = true;
 				hxd.Window.getInstance().addEventTarget(onEvent);
 			}
-			#if editor
-			renderPass(defaultPass, get("overlay"), backToFront);
-			renderPass(defaultPass, get("ui"), backToFront);
-			#end
+
 		case Performance:
 			if( enableFXAA ) {
 					mark("FXAA");
@@ -712,10 +747,6 @@ class Renderer extends h3d.scene.Renderer {
 				copy(ldr, null);
 			}
 			performance.render();
-			#if editor
-			renderPass(defaultPass, get("overlay"), backToFront);
-			renderPass(defaultPass, get("ui"), backToFront);
-			#end
 		}
 		if( debugging && displayMode != Debug ) {
 			debugging = false;