private static Buffer GenIndependentBuffer(this UnmanagedArrayBase array, IndependentBufferTarget bufferTarget, BufferUsage usage)
{
if (glGenBuffers == null)
{
InitFunctions();
}
uint[] buffers = new uint[1];
glGenBuffers(1, buffers);
var target = (uint)bufferTarget;
glBindBuffer(target, buffers[0]);
glBufferData(target, array.ByteLength, array.Header, (uint)usage);
glBindBuffer(target, 0);
Buffer buffer = null;
switch (bufferTarget)
{
case IndependentBufferTarget.AtomicCounterBuffer:
buffer = new AtomicCounterBuffer(buffers[0], array.Length, array.ByteLength);
break;
case IndependentBufferTarget.PixelPackBuffer:
buffer = new PixelPackBuffer(buffers[0], array.Length, array.ByteLength);
break;
case IndependentBufferTarget.PixelUnpackBuffer:
buffer = new PixelUnpackBuffer(buffers[0], array.Length, array.ByteLength);
break;
case IndependentBufferTarget.ShaderStorageBuffer:
buffer = new ShaderStorageBuffer(buffers[0], array.Length, array.ByteLength);
break;
case IndependentBufferTarget.TextureBuffer:
buffer = new TextureBuffer(buffers[0], array.Length, array.ByteLength);
break;
case IndependentBufferTarget.UniformBuffer:
buffer = new UniformBuffer(buffers[0], array.Length, array.ByteLength);
break;
default:
throw new NotImplementedException();
}
return buffer;
}