فهرست منبع

DirectX Fixes (#267)

* hlsl fix
* Added support for RGBA16F on DirectX
Pascal Peridont 8 سال پیش
والد
کامیت
5cfd89e63b
2فایلهای تغییر یافته به همراه23 افزوده شده و 0 حذف شده
  1. 2 0
      h3d/impl/DirectXDriver.hx
  2. 21 0
      hxsl/HlslOut.hx

+ 2 - 0
h3d/impl/DirectXDriver.hx

@@ -139,6 +139,7 @@ class DirectXDriver extends h3d.impl.Driver {
 		depthDesc.format = depthStencilFormat;
 		depthDesc.bind = DepthStencil;
 		var depth = Driver.createTexture2d(depthDesc);
+		if( depth == null ) throw "Failed to create depthBuffer";
 		var depthView = Driver.createDepthStencilView(depth,depthStencilFormat);
 		defaultDepth = { res : depth, view : depthView };
 		@:privateAccess {
@@ -265,6 +266,7 @@ class DirectXDriver extends h3d.impl.Driver {
 	function getTextureFormat( t : h3d.mat.Texture ) : dx.Format {
 		return switch( t.format ) {
 		case RGBA: R8G8B8A8_UNORM;
+		case RGBA16F: R16G16B16A16_UNORM;
 		case ALPHA32F: R32_FLOAT;
 		case ALPHA16F: R16_FLOAT;
 		case ALPHA8: R8_UNORM;

+ 21 - 0
hxsl/HlslOut.hx

@@ -221,6 +221,27 @@ class HlslOut {
 				addValue(args[i],tabs);
 			}
 			add(")");
+		case TCall(e = { e : TGlobal(g) }, args):
+			switch( [g,args.length] ) {
+			case [Vec2, 1]:
+				decl("float2 vec2( float v ) { return float2(v,v); }");
+				add("vec2");
+			case [Vec3, 1]:
+				decl("float3 vec3( float v ) { return float3(v,v,v); }");
+				add("vec3");
+			case [Vec4, 1]:
+				decl("float4 vec4( float v ) { return float4(v,v,v,v); }");
+				add("vec4");
+			default:
+				addValue(e,tabs);
+			}
+			add("(");
+			var first = true;
+			for( e in args ) {
+				if( first ) first = false else add(", ");
+				addValue(e, tabs);
+			}
+			add(")");			
 		case TGlobal(g):
 			switch( g ) {
 			case Mat3x4: