Graphics Reference
In-Depth Information
var consume = particleUAVs[1];
// Assign UAV of particles
context.ComputeShader.SetUnorderedAccessView(0,
append);
context.ComputeShader.SetUnorderedAccessView(1,
consume);
// Update the constant buffers
// Generate the next random seed for particle generator
Frame.RandomSeed = (uint)random.Next(int.MinValue,
int.MaxValue);
context.UpdateSubresource(ref Frame, perFrame);
// Copy current consume buffer count into perFrame
context.CopyStructureCount(perFrame, 4 * 3, consume);
context.ComputeShader.SetConstantBuffer(0,
perComputeBuffer);
context.ComputeShader.SetConstantBuffer(1, perFrame);
// Update existing particles
UpdateCS(updaterCS, append, consume);
// Generate new particles (if reached limiter time)
genTime += Frame.FrameTime;
if (genTime > limiter) {
genTime = 0;
GenerateCS(generatorCS, append);
}
// Retrieve the particle count for the render phase
context.CopyStructureCount(indirectArgsBuffer, 4,
append);
// Clear the shader and resources from pipeline stage
context.ComputeShader.SetUnorderedAccessViews(0, null,
null, null);
context.ComputeShader.SetUnorderedAccessViews(1, null,
null, null);
context.ComputeShader.Set(null);
// Flip UAVs/SRVs
particleUAVs[0] = consume; particleUAVs[1] = append;
var s = particleSRVs[0];
particleSRVs[0] = particleSRVs[1]; particleSRVs[1] = s;
}
 
Search WWH ::




Custom Search