public void DrawLand(Vector4 clipPlane, Matrix view) { var viewProj = view * _proj; ImmediateContext.InputAssembler.SetVertexBuffers(0, new D3D11.VertexBufferBinding(_groundVB, VertexPN.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_groundIB, DXGI.Format.R32_UInt, 0); int len; for (int p = 0; p < _tech.Description.PassCount; p++) { var wvp = _groundWorld * view * _proj; _fxWVP.SetMatrix(wvp); _fxClipPlane.Set(clipPlane); var invTranspose = Matrix.Invert(Matrix.Transpose(_groundWorld)); _fxWIT.SetMatrix(invTranspose); _fxWorld.SetMatrix(_groundWorld); var array = Util.GetArray(_landMaterial, out len); _fxMaterial.SetRawValue(DataStream.Create <byte>(array, false, false), len); _fxDiffuseMap.SetResource(_groundMapSRV); var pass = _tech.GetPassByIndex(p); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(_groundIndexCount, 0, 0); _fxDiffuseMap.SetResource(null); _fxClipPlane.Set(new float[] { 0, 0, 0, 1 }); } }
public void DrawWater() { int len; ImmediateContext.InputAssembler.SetVertexBuffers(0, new D3D11.VertexBufferBinding(_wavesVB, VertexPN.Stride, 0)); ImmediateContext.InputAssembler.SetIndexBuffer(_wavesIB, DXGI.Format.R32_UInt, 0); var invTranspose = Matrix.Invert(Matrix.Transpose(_wavesWorld)); for (int p = 0; p < _tech.Description.PassCount; p++) { ImmediateContext.OutputMerger.BlendState = _alphaBlend; _fxClipPlane.Set(new float[] { 0, 0, 0, 1 }); _fxWVP.SetMatrix(_wavesWorld * _view * _proj); _fxUseStructBuf.Set(true); _fxWIT.SetMatrix(invTranspose); _fxWorld.SetMatrix(_wavesWorld); var array = Util.GetArray(_wavesMaterial, out len); _fxMaterial.SetRawValue(DataStream.Create <byte>(array, false, false), len); _fxReflectViewProj.SetMatrix(_wavesWorld * _reflectView * _proj); _fxReflectiveMap.SetResource(reflectResourceView); _fxRefractiveMap.SetResource(refractResourceView); _fxgRefractionPositionMap.SetResource(positionMapResourceView); _fxSolutionSR.SetResource(_awave.CurrentSolutionSRV); var pass = _tech.GetPassByIndex(p); pass.Apply(ImmediateContext); ImmediateContext.DrawIndexed(3 * _awave.TriangleCount, 0, 0); ImmediateContext.Rasterizer.State = null; _fxRefractiveMap.SetResource(null); _fxReflectiveMap.SetResource(null); _fxgRefractionPositionMap.SetResource(null); _fxSolutionSR.SetResource(null); _fxUseStructBuf.Set(false); } }