Example #1
0
        public unsafe void BindArrayBuffer <T>(T[] verts, int stride, int[] attributeLengths, int[] attributeOffsets, BufferUsageHint hint = BufferUsageHint.GL_STATIC_DRAW) where T : IInterleavedVertex
        {
            GlBindings.GenVertexArrays(1, out m_VaoId);

            GlBindings.GenBuffers(1, out m_VertexArrayBufferId);
            GlBindings.BindVertexArray(m_VaoId);

            GCHandle handle       = GCHandle.Alloc(verts, GCHandleType.Pinned);
            IntPtr   ptrVerticies = handle.AddrOfPinnedObject();

            GlBindings.BindBuffer(BufferTarget.GL_ARRAY_BUFFER, m_VertexArrayBufferId);
            GlBindings.BufferData(BufferTarget.GL_ARRAY_BUFFER, stride * verts.Length, ptrVerticies, hint);
            handle.Free();

            // Setup Attributes
            for (int i = 0; i < attributeLengths.Length; i++)
            {
                GlBindings.VertexAttribPointer(i, attributeLengths[i], VertexAttribPointerType.Float, 0, stride, attributeOffsets[i]);
                GlBindings.EnableVertexAttribArray(i);
            }

            m_VertexCount = verts.Length;

            GlBindings.BindBuffer(BufferTarget.GL_ARRAY_BUFFER, 0);
            GlBindings.BindVertexArray(0);
        }
Example #2
0
        /// <summary>
        /// Initalises the Vertex Array Object without seting any vertex or index data
        /// </summary>
        public unsafe void InitElementsArrayBuffer <T>(int stride, int[] attributeLengths, int[] attributeOffsets, BufferUsageHint hint = BufferUsageHint.GL_STATIC_DRAW) where T : IInterleavedVertex
        {
            GlBindings.GenVertexArrays(1, out m_VaoId);

            GlBindings.GenBuffers(1, out m_VertexArrayBufferId);
            GlBindings.GenBuffers(1, out m_IndexBufferId);

            GlBindings.BindVertexArray(m_VaoId);

            GlBindings.BindBuffer(BufferTarget.GL_ARRAY_BUFFER, m_VertexArrayBufferId);

            GlBindings.BindBuffer(BufferTarget.GL_ELEMENT_ARRAY_BUFFER, m_IndexBufferId);


            // Setup Attributes
            for (int i = 0; i < attributeLengths.Length; i++)
            {
                GlBindings.VertexAttribPointer(i, attributeLengths[i], VertexAttribPointerType.Float, 0, stride, attributeOffsets[i]);
                GlBindings.EnableVertexAttribArray(i);
            }

            //m_VertexCount = indicies.Length;
            m_Stride      = stride;
            m_BufferUsage = hint;

            GlBindings.BindBuffer(BufferTarget.GL_ARRAY_BUFFER, 0);
            GlBindings.BindVertexArray(0);
        }