Pārlūkot izejas kodu

added material.setup(ctx)

ncannasse 12 gadi atpakaļ
vecāks
revīzija
7e323a5786

+ 3 - 0
h3d/mat/Material.hx

@@ -25,6 +25,9 @@ class Material {
 		this.colorMask = 15;
 	}
 	
+	public function setup( ctx : h3d.scene.RenderContext ) {
+	}
+	
 	public function blend(src, dst) {
 		blendSrc = src;
 		blendDst = dst;

+ 4 - 4
h3d/mat/MeshMaterial.hx

@@ -484,12 +484,12 @@ class MeshMaterial extends Material {
 		return m;
 	}
 	
-	function setup( camera : h3d.Camera, mpos ) {
-		mshader.mpos = useMatrixPos ? mpos : null;
-		mshader.mproj = camera.m;
+	override function setup( ctx : h3d.scene.RenderContext ) {
+		mshader.mpos = useMatrixPos ? ctx.localPos : null;
+		mshader.mproj = ctx.camera.m;
 		if( mshader.hasSkin && useMatrixPos && mshader.lightSystem != null ) {
 			var tmp = new h3d.Matrix();
-			tmp.inverse(mpos);
+			tmp.inverse(ctx.localPos);
 			mshader.mposInv = tmp;
 		}
 		mshader.tex = texture;

+ 1 - 2
h3d/scene/CustomObject.hx

@@ -31,8 +31,7 @@ class CustomObject extends Object {
 			ctx.addPass(draw);
 			return;
 		}
-		try Reflect.setProperty(material.shader,__unprotect__("mproj"),ctx.camera.m) catch( e : Dynamic ) {};
-		try Reflect.setProperty(material.shader,__unprotect__("mpos"),absPos) catch( e : Dynamic ) {};
+		material.setup(ctx);
 		ctx.engine.selectMaterial(material);
 		primitive.render(ctx.engine);
 	}

+ 3 - 0
h3d/scene/Image.hx

@@ -16,6 +16,9 @@ private class ImageShader extends h3d.impl.Shader {
 			out = tex.get(tuv);
 		}
 	}
+	#elseif js
+	static var VERTEX = "TODO";
+	static var FRAGMENT = "TODO";
 	#end
 }
 

+ 2 - 1
h3d/scene/Mesh.hx

@@ -32,7 +32,8 @@ class Mesh extends Object {
 			ctx.addPass(draw);
 			return;
 		}
-		material.setup(ctx.camera, this.absPos);
+		ctx.localPos = absPos;
+		material.setup(ctx);
 		ctx.engine.selectMaterial(material);
 		primitive.render(ctx.engine);
 	}

+ 2 - 1
h3d/scene/MultiMaterial.hx

@@ -26,7 +26,8 @@ class MultiMaterial extends Mesh {
 			ctx.addPass(drawMaterial.bind(_,mid));
 			return;
 		}
-		m.setup(ctx.camera, this.absPos);
+		ctx.localPos = this.absPos;
+		m.setup(ctx);
 		ctx.engine.selectMaterial(m);
 		primitive.selectMaterial(mid);
 		primitive.render(ctx.engine);

+ 1 - 0
h3d/scene/RenderContext.hx

@@ -7,6 +7,7 @@ class RenderContext {
 	public var elapsedTime : Float;
 	public var currentPass : Int;
 	public var frame : Int;
+	public var localPos : h3d.Matrix;
 	var passes : Array<RenderContext -> Void>;
 	
 	public function new() {