internal static int GlTargetTobufferTargetIndex(glBuffer.BindTarget Target) { switch (Target) { case glBuffer.BindTarget.GL_ARRAY_BUFFER: return(0); case glBuffer.BindTarget.GL_ELEMENT_ARRAY_BUFFER: return(1); case glBuffer.BindTarget.GL_PIXEL_PACK_BUFFER: return(2); case glBuffer.BindTarget.GL_PIXEL_UNPACK_BUFFER: return(3); } return(0); }
internal void BufferData(glBuffer Buffer, glBuffer.BindTarget Target, int Size, IntPtr Data, glBuffer.Usage Usage) { int indexTarget = GlTargetTobufferTargetIndex(Target); if (Size < 0) { throw new Exception("Negative buffer size are not allowed"); } lock (_Buffers) { if (_Buffers[indexTarget] != Buffer) { throw new Exception("Trying to set buffer data while the buffer is not bound to the specified target"); } _glBufferData((int)Target, new IntPtr(Size), Data.ToPointer(), (int)Usage); } }
internal void BindBuffer(glBuffer Buffer, glBuffer.BindTarget Target) { int indexTarget = GlTargetTobufferTargetIndex(Target); lock (_Buffers) { if (Buffer == null) { _glBindBuffer((int)Target, 0); _Buffers[indexTarget] = null; } else { _glBindBuffer((int)Target, Buffer.Handle); _Buffers[indexTarget] = Buffer; } } }