comnputeShaderTest = new CShader(Gl, "shader.comp");
comnputeShaderTest.Use();
uint ssboIndex = Gl.GenBuffer();
Gl.BindBufferBase(BufferTargetARB.ShaderStorageBuffer, 0, ssboIndex);
Gl.BufferData<float>(BufferTargetARB.ShaderStorageBuffer, vertices, BufferUsageARB.DynamicDraw);
Gl.BindBufferBase(BufferTargetARB.ShaderStorageBuffer, 0, ssboIndex);
Gl.DispatchCompute((uint)NUM_INVOCATIONS, 1, 1);
Gl.MemoryBarrier(MemoryBarrierMask.ShaderStorageBarrierBit);
Gl.BindBufferBase(BufferTargetARB.ShaderStorageBuffer, 0, ssboIndex);
float* returnValues = (float*)Gl.MapBuffer(BufferTargetARB.ShaderStorageBuffer, BufferAccessARB.ReadOnly);
for (int i = 0; i < NUM_INVOCATIONS; i++)
{
Console.WriteLine(returnValues[i]);
}
comnputeShaderTest = new CShader(Gl, "shader.comp");
comnputeShaderTest.Use();
uint ssboIndex = Gl.GenBuffer();
Gl.BindBufferBase(BufferTargetARB.ShaderStorageBuffer, 0, ssboIndex);
Gl.BufferData<float>(BufferTargetARB.ShaderStorageBuffer, vertices, BufferUsageARB.DynamicDraw);
Gl.BindBufferBase(BufferTargetARB.ShaderStorageBuffer, 0, ssboIndex);
Gl.DispatchCompute((uint)NUM_INVOCATIONS, 1, 1);
Gl.MemoryBarrier(MemoryBarrierMask.ShaderStorageBarrierBit);
Gl.BindBufferBase(BufferTargetARB.ShaderStorageBuffer, 0, ssboIndex);
float* returnValues = (float*)Gl.MapBuffer(BufferTargetARB.ShaderStorageBuffer, BufferAccessARB.ReadOnly);
for (int i = 0; i < NUM_INVOCATIONS; i++)
{
Console.WriteLine(returnValues[i]);
}