Selaa lähdekoodia

bugfix, cube working in directx

Nicolas Cannasse 8 vuotta sitten
vanhempi
commit
015ec31e2c
2 muutettua tiedostoa jossa 10 lisäystä ja 5 poistoa
  1. 1 1
      h3d/impl/DirectXDriver.hx
  2. 9 4
      hxsl/HlslOut.hx

+ 1 - 1
h3d/impl/DirectXDriver.hx

@@ -65,7 +65,7 @@ class DirectXDriver extends h3d.impl.Driver {
 	}
 	}
 
 
 	override function allocVertexes(m:ManagedBuffer):VertexBuffer {
 	override function allocVertexes(m:ManagedBuffer):VertexBuffer {
-		return dx.Buffer.alloc(m.size * m.stride, Default, VertexBuffer, None, None, 0, null);
+		return dx.Buffer.alloc(m.size * m.stride * 4, Default, VertexBuffer, None, None, 0, null);
 	}
 	}
 
 
 	override function allocIndexes( count : Int ) : IndexBuffer {
 	override function allocIndexes( count : Int ) : IndexBuffer {

+ 9 - 4
hxsl/HlslOut.hx

@@ -20,9 +20,6 @@ class HlslOut {
 		m.set(Vec2, "float2");
 		m.set(Vec2, "float2");
 		m.set(Vec3, "float3");
 		m.set(Vec3, "float3");
 		m.set(Vec4, "float4");
 		m.set(Vec4, "float4");
-		m.set(Mat3, "float3x3");
-		m.set(Mat3x4, "float4x3");
-		m.set(Mat4, "float4x4");
 		for( g in m )
 		for( g in m )
 			KWDS.set(g, true);
 			KWDS.set(g, true);
 		m;
 		m;
@@ -198,6 +195,14 @@ class HlslOut {
 			if( acc != null ) add(acc);
 			if( acc != null ) add(acc);
 			ident(v);
 			ident(v);
 		case TGlobal(g):
 		case TGlobal(g):
+			switch( g ) {
+			case Mat3x4:
+				// float4x3 constructor uses row-order, we want column order here
+				decl("float4x3 mat3x4( float4 a, float4 b, float4 c ) { float4x3 m; m._m00_m10_m20_m30 = a; m._m01_m11_m21_m31 = b; m._m02_m12_m22_m32 = c; return m; }");
+			case Mat4:
+				decl("float4x4 mat4( float4 a, float4 b, float4 c, float4 d ) { float4x4 m; m._m00_m10_m20_m30 = a; m._m01_m11_m21_m31 = b; m._m02_m12_m22_m32 = c; m._m03_m13_m23_m33 = d; return m; }");
+			default:
+			}
 			add(GLOBALS.get(g));
 			add(GLOBALS.get(g));
 		case TParenthesis(e):
 		case TParenthesis(e):
 			add("(");
 			add("(");
@@ -246,7 +251,7 @@ class HlslOut {
 				addValue(e1, tabs);
 				addValue(e1, tabs);
 				add(",1.),");
 				add(",1.),");
 				addValue(e2, tabs);
 				addValue(e2, tabs);
-				add(").xyz");
+				add(")");
 			case [OpMult, TVec(_), TMat3 | TMat4]:
 			case [OpMult, TVec(_), TMat3 | TMat4]:
 				add("mul(");
 				add("mul(");
 				addValue(e1, tabs);
 				addValue(e1, tabs);