Exemple #1
0
        public static void Draw(BeginMode beginMode, PositionColor[] vertexData)
        {
            int primativeCount;
            switch (beginMode)
            {
                case BeginMode.Triangles: primativeCount = vertexData.Length / 3; break;
                case BeginMode.TriangleStrip: primativeCount = vertexData.Length - 2; break;
                default: throw new ArgumentException();
            }
            if (primativeCount == 0) return;

            GL.EnableClientState(EnableCap.VertexArray);
            GL.EnableClientState(EnableCap.ColorArray);

            shader.Use();

            unsafe
            {
                fixed (float* pData = &vertexData[0].x)
                {
                    GL.VertexPointer(3, VertexPointerType.Float, PositionColor.stride, (IntPtr)pData);
                    GL.ColorPointer(3, ColorPointerType.Float, PositionColor.stride, (IntPtr)(pData + 3));

                    GL.DrawArrays(beginMode, 0, vertexData.Length);
                }
            }

            GL.DisableClientState(EnableCap.VertexArray);
            GL.DisableClientState(EnableCap.ColorArray);

            //GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
            //GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
        }