Ejemplo n.º 1
0
        public void UpdateWave(float dt)
        {
            _wavet += dt;

            if (!(_wavet >= _waveTimeStep))
            {
                return;
            }

            CloseCurrentBuffer();

            _waveSwapChain.Swap();

            while (_wavet > _waveTimeStep)
            {
                _wavet -= _waveTimeStep;
            }

            ImmediateContext.ComputeShader.Set(_compShader);
            ImmediateContext.ComputeShader.SetConstantBuffer(0, _wavesCBBuffer);
            ImmediateContext.ComputeShader.SetShaderResources(0, _waveSwapChain.PastSolution);
            ImmediateContext.ComputeShader.SetUnorderedAccessView(0, _waveSwapChain.CurrentSolution);

            ImmediateContext.Dispatch((int)_wavesCB.ColumnCount / BLOCK_SIZE + 1, (int)_wavesCB.RowCount / BLOCK_SIZE + 1, 1);

            ImmediateContext.ComputeShader.SetUnorderedAccessView(0, null);
            ImmediateContext.ComputeShader.SetShaderResource(0, null);
            ImmediateContext.ComputeShader.Set(null);
        }
Ejemplo n.º 2
0
 public void Dispatch(int x, int y, int z = 1)
 {
     // test agains feature level 11.0 specs
     Debug.Assert(x <= DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION);
     Debug.Assert(y <= DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION);
     Debug.Assert(z <= DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION);
     context.Dispatch(x, y, z);
 }
Ejemplo n.º 3
0
 /// <summary>
 ///     スキニングを実行する。
 /// </summary>
 /// <param name="d3ddc">
 ///     実行対象のDeviceContext。
 /// </param>
 /// <param name="入力頂点数">
 ///     モデルの全頂点数。
 /// </param>
 /// <param name="ボーンのモデルポーズ行列定数バッファ">
 ///     ボーンのモデルポーズ行列の配列を格納された定数バッファ。
 ///     構造については <see cref="PMXモデル.D3DBoneTrans"/> 参照。
 /// </param>
 /// <param name="ボーンのローカル位置定数バッファ">
 ///     ボーンのローカル位置の配列が格納された定数バッファ。
 ///     構造については <see cref="PMXモデル.D3DBoneLocalPosition"/> 参照。
 /// </param>
 /// <param name="ボーンの回転行列定数バッファ">
 ///     ボーンの回転行列の配列が格納された定数バッファ。
 ///     構造については <see cref="PMXモデル.D3DBoneLocalPosition"/> 参照。
 /// </param>
 /// <param name="変形前頂点データSRV">
 ///     スキニングの入力となる頂点データリソースのSRV。
 ///     構造については <see cref="CS_INPUT"/> 参照。
 /// </param>
 /// <param name="変形後頂点データUAV">
 ///     スキニングの出力を書き込む頂点データリソースのUAV。
 ///     構造については <see cref="VS_INPUT"/> 参照。
 /// </param>
 /// <remarks>
 ///     このメソッドの呼び出し時には、<paramref name="d3ddc"/> には事前に以下のように設定される。
 ///     ComputeShader
 ///         - slot( b1 ) …… <paramref name="ボーンのモデルポーズ行列定数バッファ"/>
 ///         - slot( b2 ) …… <paramref name="ボーンのローカル位置定数バッファ"/>
 ///         - slot( b3 ) …… <paramref name="ボーンの回転行列定数バッファ"/>
 ///         - slot( t0 ) …… <paramref name="変形前頂点データSRV"/>
 ///         - slot( u0 ) …… <paramref name="変形後頂点データUAV"/>
 /// </remarks>
 public void Run(
     SharpDX.Direct3D11.DeviceContext d3ddc,
     int 入力頂点数,
     SharpDX.Direct3D11.Buffer ボーンのモデルポーズ行列定数バッファ,
     SharpDX.Direct3D11.Buffer ボーンのローカル位置定数バッファ,
     SharpDX.Direct3D11.Buffer ボーンの回転行列定数バッファ,
     SharpDX.Direct3D11.ShaderResourceView 形前頂点データSRV,
     SharpDX.Direct3D11.UnorderedAccessView 形後頂点データUAV)
 {
     d3ddc.ComputeShader.Set(this.ComputeShader);
     d3ddc.Dispatch((入力頂点数 / 64) + 1, 1, 1);     // 既定のシェーダー(DefaultSkinningComputeShader.hlsl)に合わせてある
 }
Ejemplo n.º 4
0
 internal void Dispatch(int threadGroupCountX, int threadGroupCountY, int threadGroupCountZ)
 {
     m_deviceContext.Dispatch(threadGroupCountX, threadGroupCountY, threadGroupCountZ);
     m_statistics.Dispatches++;
     CheckErrors();
 }
Ejemplo n.º 5
0
 public void Dispatch(int x, int y, int z = 1)
 {
     context.Dispatch(x, y, z);
 }