Browse Source

L3D: Improve debug colors rendering

trethaller 7 years ago
parent
commit
4a19f74246
2 changed files with 39 additions and 22 deletions
  1. 30 8
      hide/prefab/Box.hx
  2. 9 14
      hide/prefab/l3d/Polygon.hx

+ 30 - 8
hide/prefab/Box.hx

@@ -4,10 +4,12 @@ class Box extends Object3D {
 
 	var mesh : h3d.scene.Mesh = null;
 	
-	public function setColor(col: Int) {
+	public function setColor(color: Int) {
+		#if editor
 		if(mesh != null) {
-			mesh.material.color.setColor(col);
+			setDebugColor(color, mesh.material);
 		}
+		#end
 	}
 
 	override function makeInstance(ctx:Context):Context {
@@ -17,12 +19,7 @@ class Box extends Object3D {
 		var prim = h3d.prim.Cube.defaultUnitCube();
 		mesh = new h3d.scene.Mesh(prim, obj);
 		mesh.setPos(-0.5, -0.5, -0.5);
-		var mat = mesh.material;
-		mat.color.setColor(0x60ff00ff);
-		mat.blendMode = Alpha;
-		mat.mainPass.depthWrite = false;
-		mat.mainPass.setPassName("alpha");
-		mat.shadows = false;
+		setColor(0x60ff00ff);
 
 		var wire = new h3d.scene.Box(obj);
 		wire.color = 0;
@@ -34,6 +31,31 @@ class Box extends Object3D {
 		return ctx;
 	}
 
+	#if editor
+	static public function setDebugColor(color : Int, mat : h3d.mat.Material) {
+		mat.color.setColor(color);
+		var opaque = (color >>> 24) == 0xff;
+		mat.shadows = false;
+		
+		if(opaque) {
+			var alpha = mat.getPass("debuggeom_alpha");
+			if(alpha != null)
+				mat.removePass(alpha);
+			mat.mainPass.setPassName("default");
+		 	mat.mainPass.setBlendMode(None);
+		 	mat.mainPass.depthWrite = true;
+		}
+		else {
+			mat.mainPass.setPassName("debuggeom");
+			mat.mainPass.setBlendMode(Alpha);
+			mat.mainPass.depthWrite = true;
+			var alpha = mat.allocPass("debuggeom_alpha");
+			alpha.setBlendMode(Alpha);
+			alpha.depthWrite = false;
+		}
+	}
+	#end
+
 	override function getHideProps() {
 		return { icon : "square", name : "Box", fileSource : null };
 	}

+ 9 - 14
hide/prefab/l3d/Polygon.hx

@@ -5,12 +5,6 @@ class Polygon extends Object3D {
 
 	var data : Array<Float> = null;
 	public var mesh(default, null) : h3d.scene.Mesh = null;
-
-	public function setColor(col: Int) {
-		if(mesh != null) {
-			mesh.material.color.setColor(col | (80 << 24));
-		}
-	}
 	
 	override function save() {
 		var obj : Dynamic = super.save();
@@ -52,15 +46,8 @@ class Polygon extends Object3D {
 		var obj = new h3d.scene.Object(ctx.local3d);
 		mesh = new h3d.scene.Mesh(prim, obj);
 		var mat = mesh.material;
-		mat.color.setColor(layer != null ? (layer.color | 0x40000000) : 0x40ff00ff);
+		setColor(layer != null ? (layer.color | 0x40000000) : 0x40ff00ff);
 		mat.mainPass.culling = None;
-		mat.mainPass.setPassName("debuggeom");
-		mat.mainPass.setBlendMode(Alpha);
-		mat.mainPass.depthWrite = true;
-
-		var alpha = mat.allocPass("debuggeom_alpha");
-		alpha.setBlendMode(Alpha);
-		alpha.depthWrite = false;
 		mat.shadows = false;
 		ctx.local3d = obj;
 		ctx.local3d.name = name;
@@ -68,6 +55,14 @@ class Polygon extends Object3D {
 		return ctx;
 	}
 
+	public function setColor(color: Int) {
+		#if editor
+		if(mesh != null) {
+			hide.prefab.Box.setDebugColor(color, mesh.material);
+		}
+		#end
+	}
+
 	override function getHideProps() {
 		return { icon : "square", name : "Polygon", fileSource : null };
 	}