فهرست منبع

added pass.Border to draw clamp color

Nicolas Cannasse 11 سال پیش
والد
کامیت
74852a9a7d
3فایلهای تغییر یافته به همراه81 افزوده شده و 2 حذف شده
  1. 66 0
      h3d/pass/Border.hx
  2. 5 1
      h3d/pass/ScreenFx.hx
  3. 10 1
      h3d/pass/ShadowMap.hx

+ 66 - 0
h3d/pass/Border.hx

@@ -0,0 +1,66 @@
+package h3d.pass;
+
+private class BorderShader extends hxsl.Shader {
+	static var SRC = {
+
+		@param var color : Vec4;
+
+		@input var input : {
+			var position : Vec2;
+		};
+
+		var output : {
+			var position : Vec4;
+			var color : Vec4;
+		};
+
+		function vertex() {
+			output.position = vec4(input.position, 0, 1);
+		}
+
+		function fragment() {
+			output.color = color;
+		}
+
+	}
+}
+
+class Border extends ScreenFx<BorderShader> {
+
+	public function new( size : Int ) {
+		super(new BorderShader());
+
+		var bbuf = new hxd.FloatBuffer();
+		inline function add(x, y) {
+			bbuf.push((x / size) * 2 - 1);
+			bbuf.push(1 - (y / size) * 2);
+		}
+		add(0, 0);
+		add(size, 0);
+		add(0, 1);
+		add(size, 1);
+
+		add(0, 0);
+		add(1, 0);
+		add(0, size);
+		add(1, size);
+
+		add(0, size-1);
+		add(size, size-1);
+		add(0, size);
+		add(size, size);
+
+		add(size-1, 0);
+		add(size, 0);
+		add(size-1, size);
+		add(size, size);
+
+		var plan = new h3d.prim.RawPrimitive(engine, bbuf, 2);
+		plan.buffer.flags.unset(Triangles);
+		plan.buffer.flags.set(Quads);
+		this.plan = plan;
+		shader.color.set(1,1,1,1);
+	}
+
+
+}

+ 5 - 1
h3d/pass/ScreenFx.hx

@@ -5,7 +5,7 @@ class ScreenFx<T:hxsl.Shader> {
 	public var shader : T;
 	var pass : h3d.mat.Pass;
 	var manager : h3d.shader.Manager;
-	var plan : h3d.prim.Plan2D;
+	var plan : h3d.prim.Primitive;
 	var engine : h3d.Engine;
 
 	public function new(shader) {
@@ -32,4 +32,8 @@ class ScreenFx<T:hxsl.Shader> {
 		plan.render(engine);
 	}
 
+	public function dispose() {
+		plan.dispose();
+	}
+
 }

+ 10 - 1
h3d/pass/ShadowMap.hx

@@ -8,7 +8,9 @@ class ShadowMap extends Default {
 	var shadowColorId : Int;
 	var shadowPowerId : Int;
 	var shadowBiasId : Int;
-	public var size : Int;
+	var border : Border;
+
+	public var size(default,set) : Int;
 	public var lightDirection : h3d.Vector;
 	public var color : h3d.Vector;
 	public var power = 10.0;
@@ -32,6 +34,12 @@ class ShadowMap extends Default {
 		blur = new Blur(2, 3);
 	}
 
+	function set_size(s) {
+		if( border != null ) border.dispose();
+		border = new Border(s);
+		return size = s;
+	}
+
 	public dynamic function getSceneBounds( bounds : h3d.col.Bounds ) {
 		bounds.xMin = -10;
 		bounds.yMin = -10;
@@ -61,6 +69,7 @@ class ShadowMap extends Default {
 		ctx.engine.setTarget(texture);
 		ctx.engine.clear(0xFFFFFFFF, 1);
 		passes = super.draw(name, passes);
+		border.render();
 		ctx.engine.setTarget(null);
 
 		if( blur.quality > 0 )