Exemple #1
0
        private static Vbo genVBO <TVertex>(TVertex[] vertices, short[] elements) where TVertex : struct
        {
            Debug.Trace("VBOCube generated -> vertices: " + vertices.Length + "; elements: " + elements.Length);

            Vbo vbo = new Vbo();
            int size;

            GL.GenBuffers(1, out vbo.vboID);
            GL.BindBuffer(BufferTarget.ArrayBuffer, vbo.vboID);
            GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(vertices.Length * BlittableValueType.StrideOf(vertices)), vertices, BufferUsageHint.StaticDraw);
            //GL.BufferData<Vertex>(BufferTarget.ArrayBuffer, (IntPtr)(vertices.Length * Vertex.SizeInBytes), vertices, BufferUsageHint.StaticDraw);
            //GL.InterleavedArrays(InterleavedArrayFormat.C4ubV3f, 0, IntPtr.Zero);
            GL.GetBufferParameter(BufferTarget.ArrayBuffer, BufferParameterName.BufferSize, out size);
            if (vertices.Length * BlittableValueType.StrideOf(vertices) != size)
            {
                throw new ApplicationException("Vertex data not uploaded correctly");
            }

            GL.GenBuffers(1, out vbo.eboID);
            GL.BindBuffer(BufferTarget.ElementArrayBuffer, vbo.eboID);
            GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(elements.Length * sizeof(short)), elements, BufferUsageHint.StaticDraw);
            GL.GetBufferParameter(BufferTarget.ElementArrayBuffer, BufferParameterName.BufferSize, out size);
            if (elements.Length * sizeof(short) != size)
            {
                throw new ApplicationException("Element data not uploaded correctly");
            }

            vbo.numElements    = elements.Length;
            vbo.sizeOfVertices = BlittableValueType.StrideOf(vertices);
            return(vbo);
        }
Exemple #2
0
 public VBOPrimitive(int name, VertexPositionColor[] vertices, short[] elements)
     : base(name)
 {
     if (!wasGenerated)
     {
         vbo          = genVBO(vertices, elements);
         wasGenerated = true;
     }
 }