瀏覽代碼

Adding checker properties on materials.

clementlandrin 2 年之前
父節點
當前提交
fabe495bee
共有 2 個文件被更改,包括 33 次插入0 次删除
  1. 12 0
      h3d/mat/PbrMaterial.hx
  2. 21 0
      h3d/shader/Checker.hx

+ 12 - 0
h3d/mat/PbrMaterial.hx

@@ -90,6 +90,7 @@ typedef PbrProps = {
 	@:optional var stencilReadMask : Int;
 	@:optional var stencilReadMask : Int;
 
 
 	@:optional var drawOrder : String;
 	@:optional var drawOrder : String;
+	@:optional var useChecker : Bool;
 }
 }
 
 
 class PbrMaterial extends Material {
 class PbrMaterial extends Material {
@@ -234,6 +235,8 @@ class PbrMaterial extends Material {
 			Reflect.deleteField(props,"drawOrder");
 			Reflect.deleteField(props,"drawOrder");
 		if( props.depthWrite == Default )
 		if( props.depthWrite == Default )
 		 	Reflect.deleteField(props, "depthWrite");
 		 	Reflect.deleteField(props, "depthWrite");
+		if ( !props.useChecker )
+			Reflect.deleteField(props, "useChecker");
 		#end
 		#end
 	}
 	}
 
 
@@ -382,6 +385,14 @@ class PbrMaterial extends Material {
 				mainPass.layer = Std.parseInt(props.drawOrder);
 				mainPass.layer = Std.parseInt(props.drawOrder);
 			p = p.nextPass;
 			p = p.nextPass;
 		}
 		}
+
+		if ( texture != null && props.useChecker ) {
+			mainPass.addShader(new h3d.shader.Checker());
+		} else {
+			var s = mainPass.getShader(h3d.shader.Checker);
+			if ( s != null )
+				mainPass.removeShader(s); 
+		}
 	}
 	}
 
 
 	function setColorMask() {
 	function setColorMask() {
@@ -564,6 +575,7 @@ class PbrMaterial extends Material {
 						${[for( i in 0...layers.length ) '<option value="${layers[i].value}">${layers[i].name}</option>'].join("")}
 						${[for( i in 0...layers.length ) '<option value="${layers[i].value}">${layers[i].name}</option>'].join("")}
 					</select>
 					</select>
 				</dd>
 				</dd>
+				<dt>Checker</dt><dd><input type="checkbox" field="useChecker"/></dd>
 			</dl>
 			</dl>
 		');
 		');
 	}
 	}

+ 21 - 0
h3d/shader/Checker.hx

@@ -0,0 +1,21 @@
+package h3d.shader;
+
+class Checker extends hxsl.Shader {
+
+	static var SRC = {
+		var pixelColor : Vec4;
+
+		@param var width : Float;
+		@param var height : Float;
+
+		var calculatedUV : Vec2;
+		function fragment() {
+			if ( ((calculatedUV.fract().x - 0.5) * (calculatedUV.fract().y - 0.5)) > 0.0 ) {
+				pixelColor.rgb = vec3(1.0);
+			} else {
+				pixelColor.rgb = vec3(0.0);
+			}
+		}
+
+	};
+}