2 가지 효과가 있습니다. 방금 쉐이더와 DirectX로 작업하기 시작했습니다. 어리석은 질문으로 인해 미안합니다. 계산 쉐이더가있는 Firts 하나에는 RWStructuredBuffer가 필요합니다.ID3D11UnorderedAccess StructuredBuffer에 데이터보기
RWStructuredBuffer<Particle> Particles : register(u0);
두 번째는 :
StructuredBuffer<Particle> Particles : register(t0);
나는 데이터를 이런 식으로 만들어 :
//creating buffer for initial particles
D3D11_BUFFER_DESC cbDesc = {};
cbDesc.ByteWidth = sizeof(Particle)*PARTICLES_COUNT;
cbDesc.Usage = D3D11_USAGE::D3D11_USAGE_DEFAULT;
//cbDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_UNORDERED_ACCESS & D3D11_BIND_FLAG::D3D11_BIND_SHADER_RESOURCE;
cbDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_SHADER_RESOURCE;
cbDesc.CPUAccessFlags = 0;
cbDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
cbDesc.StructureByteStride = sizeof(Particle);
D3D11_BUFFER_DESC cbuavDesc = {};
cbuavDesc.ByteWidth = sizeof(Particle)*PARTICLES_COUNT;
cbuavDesc.Usage = D3D11_USAGE::D3D11_USAGE_DEFAULT;
//cbuavDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_UNORDERED_ACCESS & D3D11_BIND_FLAG::D3D11_BIND_SHADER_RESOURCE;
cbuavDesc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_UNORDERED_ACCESS;
cbuavDesc.CPUAccessFlags = 0;
cbuavDesc.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
cbuavDesc.StructureByteStride = sizeof(Particle);
// Fill in the subresource data.
D3D11_SUBRESOURCE_DATA InitData = {};
InitData.pSysMem = &initialParticles;
InitData.SysMemPitch = sizeof(Particle)*PARTICLES_COUNT;
InitData.SysMemSlicePitch = 0;
hr = g_pd3dDevice->CreateBuffer(&cbDesc, &InitData, &solverParticles);
hr = g_pd3dDevice->CreateBuffer(&cbuavDesc, &InitData, &solverUAVParticles);
D3D11_UNORDERED_ACCESS_VIEW_DESC uvDesc = {};
uvDesc.Buffer.FirstElement = 0;
uvDesc.Buffer.NumElements = PARTICLES_COUNT;
uvDesc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_COUNTER;
uvDesc.Format = DXGI_FORMAT_UNKNOWN;
uvDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
D3D11_SHADER_RESOURCE_VIEW_DESC svDesc = {};
svDesc.Buffer.NumElements = PARTICLES_COUNT;
svDesc.Buffer.FirstElement = 0;
svDesc.Format = DXGI_FORMAT_UNKNOWN;
svDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
hr = g_pd3dDevice->CreateUnorderedAccessView(solverUAVParticles, &uvDesc, &g_uav);
hr = g_pd3dDevice->CreateShaderResourceView(solverParticles, &svDesc, &g_particlesStructuredBufferView);
을 그리고 통과 :
hr = g_particlesUAV->SetUnorderedAccessView(g_uav);
hr = g_particlesStructuredBuffer->SetResource(g_particlesStructuredBufferView);
불행하게도 두 번째 효과는 초기 데이터를 렌더링,하지만 난 필요 이미 변경된 데이터를 c에서 렌더링하기 ompute 쉐이더. 도움이되는 샘플을 찾지 못했습니다. 도움을 주셔서 감사합니다.