Browse Source

depth buffer ok

Nicolas Cannasse 8 years ago
parent
commit
6a129a52d4
1 changed files with 31 additions and 5 deletions
  1. 31 5
      h3d/impl/DirectXDriver.hx

+ 31 - 5
h3d/impl/DirectXDriver.hx

@@ -36,6 +36,7 @@ class DirectXDriver extends h3d.impl.Driver {
 	var defaultTarget : RenderTargetView;
 	var currentTargets = new hl.NativeArray<RenderTargetView>(16);
 	var viewport : hl.BytesAccess<hl.F32> = new hl.Bytes(6 * 4);
+	var depthView : DepthStencilView;
 
 	public function new() {
 		shaders = new Map();
@@ -44,6 +45,20 @@ class DirectXDriver extends h3d.impl.Driver {
 		if( driver == null ) throw "Failed to initialize DirectX driver";
 		Driver.iaSetPrimitiveTopology(TriangleList);
 
+		var width = win.width;
+		var height = win.height;
+
+		var depthDesc = new Texture2dDesc();
+		depthDesc.width = width;
+		depthDesc.height = height;
+		depthDesc.mipLevels = 1;
+		depthDesc.arraySize = 1;
+		depthDesc.format = D24_UNORM_S8_UINT;
+		depthDesc.sampleCount = 1;
+		depthDesc.bind = DepthStencil;
+		var depth = Driver.createTexture2d(depthDesc);
+		depthView = Driver.createDepthStencilView(depth,depthDesc.format);
+
 		var buf = Driver.getBackBuffer();
 		defaultTarget = Driver.createRenderTargetView(buf);
 		buf.release();
@@ -53,12 +68,21 @@ class DirectXDriver extends h3d.impl.Driver {
 		viewport[5] = 1.;
 		Driver.rsSetViewports(1, viewport);
 
+		var desc = new DepthStencilStateDesc();
+		desc.depthFunc = Less;
+		desc.depthEnable = true;
+		desc.depthWrite = true;
+		var ds = Driver.createDepthStencilState(desc);
+		Driver.omSetDepthStencilState(ds);
+
 		currentTargets[0] = defaultTarget;
-		Driver.omSetRenderTargets(1, currentTargets);
+		Driver.omSetRenderTargets(1, currentTargets, depthView);
+
 
 		var desc = new RasterizerStateDesc();
 		desc.fillMode = Solid;
 		desc.cullMode = None;
+		desc.depthClipEnable = true;
 		var rs = Driver.createRasterizerState(desc);
 		Driver.rsSetState(rs);
 	}
@@ -74,6 +98,8 @@ class DirectXDriver extends h3d.impl.Driver {
 	override function clear(?color:h3d.Vector, ?depth:Float, ?stencil:Int) {
 		if( color != null )
 			Driver.clearColor(currentTargets[0], color.r, color.g, color.b, color.a);
+		if( depth != null || stencil != null )
+			Driver.clearDepthStencilView(depthView, depth, stencil);
 	}
 
 	override function getDriverName(details:Bool) {
@@ -87,11 +113,11 @@ class DirectXDriver extends h3d.impl.Driver {
 	}
 
 	override function allocVertexes(m:ManagedBuffer):VertexBuffer {
-		return dx.Resource.createBuffer(m.size * m.stride * 4, Default, VertexBuffer, None, None, 0, null);
+		return dx.Driver.createBuffer(m.size * m.stride * 4, Default, VertexBuffer, None, None, 0, null);
 	}
 
 	override function allocIndexes( count : Int ) : IndexBuffer {
-		return dx.Resource.createBuffer(count << 1, Default, IndexBuffer, None, None, 0, null);
+		return dx.Driver.createBuffer(count << 1, Default, IndexBuffer, None, None, 0, null);
 	}
 
 	override function disposeVertexes(v:VertexBuffer) {
@@ -140,8 +166,8 @@ class DirectXDriver extends h3d.impl.Driver {
 		var ctx = new ShaderContext(s);
 		ctx.globalsSize = shader.globalsSize;
 		ctx.paramsSize = shader.paramsSize;
-		ctx.globals = dx.Resource.createBuffer(shader.globalsSize * 16, Dynamic, ConstantBuffer, CpuWrite, None, 0, null);
-		ctx.params = dx.Resource.createBuffer(shader.paramsSize * 16, Dynamic, ConstantBuffer, CpuWrite, None, 0, null);
+		ctx.globals = dx.Driver.createBuffer(shader.globalsSize * 16, Dynamic, ConstantBuffer, CpuWrite, None, 0, null);
+		ctx.params = dx.Driver.createBuffer(shader.paramsSize * 16, Dynamic, ConstantBuffer, CpuWrite, None, 0, null);
 		return { s : ctx, bytes : bytes };
 	}