Răsfoiți Sursa

only iterate current pass shaders (not inherited ones)

ncannasse 10 ani în urmă
părinte
comite
25ec2d490e
2 a modificat fișierele cu 10 adăugiri și 5 ștergeri
  1. 2 2
      h3d/mat/Pass.hx
  2. 8 3
      hxsl/ShaderList.hx

+ 2 - 2
h3d/mat/Pass.hx

@@ -123,7 +123,7 @@ class Pass {
 
 	public function getShader< T:hxsl.Shader >(t:Class<T>) : T {
 		var s = shaders;
-		while( s != null ) {
+		while( s != parentShaders ) {
 			var sh = Std.instance(s.s, t);
 			if( sh != null )
 				return sh;
@@ -133,7 +133,7 @@ class Pass {
 	}
 
 	public inline function getShaders() {
-		return shaders.iterator();
+		return shaders.iterateTo(parentShaders);
 	}
 
 	function getShadersRec() {

+ 8 - 3
hxsl/ShaderList.hx

@@ -11,17 +11,22 @@ class ShaderList {
 		return new ShaderList(s.clone(), next == null ? null : next.clone());
 	}
 	public inline function iterator() {
-		return new ShaderIterator(this);
+		return new ShaderIterator(this,null);
+	}
+	public inline function iterateTo(s) {
+		return new ShaderIterator(this,s);
 	}
 }
 
 private class ShaderIterator {
 	var l : ShaderList;
-	public inline function new(l) {
+	var last : ShaderList;
+	public inline function new(l,last) {
 		this.l = l;
+		this.last = last;
 	}
 	public inline function hasNext() {
-		return l != null;
+		return l != last;
 	}
 	public inline function next() {
 		var s = l.s;