2016-05-05 27 views
0

私のコードが機能しました。 まず、CopyResourceによって計算シェーダからバッファを取得するバッファを作成します。計算シェーダの結果を頂点シェーダに渡すにはどうすればいいですか?

次に、ポインタ呼び出しp1を作成し、MappedResource1から結果ポインタを取得します。 その後、頂点バッファを作成してレンダリングします。

しかし、私はそれは計算シェーダから頂点バッファを取得するための最良の方法だとは思わない:、私は多くのサンプルを読んだ

D3D11_BUFFER_DESC desc; 
ZeroMemory(&desc, sizeof(desc)); 
mFirstBuffer->GetDesc(&desc); 
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; 
desc.Usage = D3D11_USAGE_STAGING; 
desc.BindFlags = 0; 
desc.MiscFlags = 0; 
if (SUCCEEDED(device->CreateBuffer(&desc, nullptr, &debugbuf))) 
{ 
    context->CopyResource(debugbuf, mFirstBuffer.Get()); 
} 
unsigned int stride = sizeof(InstanceData); 
unsigned int offset = 0; 
D3D11_MAPPED_SUBRESOURCE MappedResource1; 
InstanceData *p1; 

context->Map(debugbuf, 0, D3D11_MAP_READ, 0, &MappedResource1); 
p1 = (InstanceData*)MappedResource1.pData; 
context->Unmap(debugbuf, 0); 

D3D11_SUBRESOURCE_DATA VertexBufferData; 
VertexBufferData.pSysMem = p1; 
VertexBufferData.SysMemPitch = 0; 
VertexBufferData.SysMemSlicePitch = 0; 
D3D11_BUFFER_DESC desc2; 
desc2.ByteWidth = sizeof(InstanceData) * MillionParticleCount; 
desc2.Usage = D3D11_USAGE_DEFAULT; 
desc2.BindFlags = D3D11_BIND_VERTEX_BUFFER; 
desc2.CPUAccessFlags = 0; 
desc2.MiscFlags = 0; 
desc2.StructureByteStride = 0; 
device->CreateBuffer(&desc2, &VertexBufferData, &vertexBuffer); 

context->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); 

それらのすべてだけで一つのファイルにまとめて計算シェーダと頂点シェーダを書いて、そのため、計算シェーダから直接結果を得ることができます。

私のコードでは、計算シェーダと頂点シェーダは異なるファイルに書き込まれています。 コードを最適化するにはどうすればよいですか?

+0

私のポストのように私の古い方法を使用するには、サンプルがそれらの間でデータを共有することができますものではありません。 – MooseBoys

+0

@MooseBoys助けてください、私はこれに関するコードを見つけることができませんでした。 – Yonghui

答えて

0

最後に、私は同じファイルで頂点およびピクセルシェーダコードを置く

関連する問題