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);
それらのすべてだけで一つのファイルにまとめて計算シェーダと頂点シェーダを書いて、そのため、計算シェーダから直接結果を得ることができます。
私のコードでは、計算シェーダと頂点シェーダは異なるファイルに書き込まれています。 コードを最適化するにはどうすればよいですか?
私のポストのように私の古い方法を使用するには、サンプルがそれらの間でデータを共有することができますものではありません。 – MooseBoys
@MooseBoys助けてください、私はこれに関するコードを見つけることができませんでした。 – Yonghui