Bladeren bron

added support for %= and *= mat3x4

Nicolas Cannasse 9 jaren geleden
bovenliggende
commit
5f5172e0f9
2 gewijzigde bestanden met toevoegingen van 11 en 3 verwijderingen
  1. 1 1
      h3d/impl/GlDriver.hx
  2. 10 2
      hxsl/GlslOut.hx

+ 1 - 1
h3d/impl/GlDriver.hx

@@ -177,7 +177,7 @@ class GlDriver extends Driver {
 			gl.deleteShader(p.fragment.s);
 			gl.deleteShader(p.fragment.s);
 			if( gl.getProgramParameter(p.p, GL.LINK_STATUS) != cast 1 ) {
 			if( gl.getProgramParameter(p.p, GL.LINK_STATUS) != cast 1 ) {
 				var log = gl.getProgramInfoLog(p.p);
 				var log = gl.getProgramInfoLog(p.p);
-				throw "Program linkage failure: "+log;
+				throw "Program linkage failure: "+log+"\nVertex=\n"+glout.run(shader.vertex.data)+"\n\nFragment=\n"+glout.run(shader.fragment.data);
 			}
 			}
 			initShader(p, p.vertex, shader.vertex);
 			initShader(p, p.vertex, shader.vertex);
 			initShader(p, p.fragment, shader.fragment);
 			initShader(p, p.fragment, shader.fragment);

+ 10 - 2
hxsl/GlslOut.hx

@@ -214,15 +214,23 @@ class GlslOut {
 			add("}");
 			add("}");
 		case TBinop(op, e1, e2):
 		case TBinop(op, e1, e2):
 			switch( [op, e1.t, e2.t] ) {
 			switch( [op, e1.t, e2.t] ) {
-			case [OpMult, TVec(3,VFloat), TMat3x4]:
+			case [OpAssignOp(OpMult) | OpMult, TVec(3,VFloat), TMat3x4]:
 				decl(MAT34);
 				decl(MAT34);
 				decl("vec3 m3x4mult( vec3 v, _mat3x4 m) { vec4 ve = vec4(v,1.0); return vec3(dot(m.a,ve),dot(m.b,ve),dot(m.c,ve)); }");
 				decl("vec3 m3x4mult( vec3 v, _mat3x4 m) { vec4 ve = vec4(v,1.0); return vec3(dot(m.a,ve),dot(m.b,ve),dot(m.c,ve)); }");
+				if( op.match(OpAssignOp(_)) ) {
+					addValue(e1, tabs);
+					add(" = ");
+				}
 				add("m3x4mult(");
 				add("m3x4mult(");
 				addValue(e1, tabs);
 				addValue(e1, tabs);
 				add(",");
 				add(",");
 				addValue(e2, tabs);
 				addValue(e2, tabs);
 				add(")");
 				add(")");
-			case [OpMod, _, _]:
+			case [OpAssignOp(OpMod) | OpMod, _, _]:
+				if( op.match(OpAssignOp(_)) ) {
+					addValue(e1, tabs);
+					add(" = ");
+				}
 				add("mod(");
 				add("mod(");
 				addValue(e1, tabs);
 				addValue(e1, tabs);
 				add(",");
 				add(",");