我的代码有效。 首先,我创建了一个缓冲区,通过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 :(得分:0)
最后我使用我的旧方法,如我的帖子