示例#1
0
        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);
        }
示例#2
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);
            }
        }
示例#3
0
        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;
                }
            }
        }