public static void Draw(BeginMode beginMode, PositionTexture[] vertexData, uint handleTexture)
{
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.ActiveTexture(TextureUnit.Texture0);
GL.Enable(EnableCap.Texture2D);
GL.BindTexture(TextureTarget.Texture2D, handleTexture);
GL.EnableClientState(EnableCap.VertexArray);
GL.ClientActiveTexture(TextureUnit.Texture0);
GL.EnableClientState(EnableCap.TextureCoordArray);
shader.Use();
shader.SetSamplerUniform("sampler0", 0);
unsafe
{
fixed (float* pData = &vertexData[0].x)
{
GL.VertexPointer(3, VertexPointerType.Float, PositionTexture.stride, (IntPtr)pData);
GL.TexCoordPointer(2, TexCoordPointerType.Float, PositionTexture.stride, (IntPtr)(pData + 3));
GL.DrawArrays(beginMode, 0, vertexData.Length);
}
}
GL.DisableClientState(EnableCap.VertexArray);
GL.DisableClientState(EnableCap.TextureCoordArray);
//GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
//GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
GL.Disable(EnableCap.Texture2D);
}
}