public override void DrawModelData(ModelData data) { GL.EnableClientState(ArrayCap.VertexArray); GL.EnableClientState(ArrayCap.ColorArray); GL.EnableClientState(ArrayCap.TextureCoordArray); float[] dataXyz = data.getXyz(); float[] dataUv = data.getUv(); byte[] dataRgba = data.getRgba(); for (int i = 0; i < data.GetXyzCount(); i++) { xyz[i] = dataXyz[i]; } for (int i = 0; i < data.GetUvCount(); i++) { uv[i] = dataUv[i]; } if (dataRgba == null) { for (int i = 0; i < data.GetRgbaCount(); i++) { rgba[i] = 255; } } else { for (int i = 0; i < data.GetRgbaCount(); i++) { rgba[i] = dataRgba[i]; } } GL.VertexPointer(3, VertexPointerType.Float, 3 * 4, xyz); GL.ColorPointer(4, ColorPointerType.UnsignedByte, 4 * 1, rgba); GL.TexCoordPointer(2, TexCoordPointerType.Float, 2 * 4, uv); BeginMode beginmode = BeginMode.Triangles; if (data.getMode() == DrawModeEnum.Triangles) { beginmode = BeginMode.Triangles; GL.Enable(EnableCap.Texture2D); } else if (data.getMode() == DrawModeEnum.Lines) { beginmode = BeginMode.Lines; GL.Disable(EnableCap.Texture2D); } else { throw new Exception(); } int[] dataIndices = data.getIndices(); for (int i = 0; i < data.GetIndicesCount(); i++) { indices[i] = (ushort)dataIndices[i]; } GL.DrawElements(beginmode, data.GetIndicesCount(), DrawElementsType.UnsignedShort, indices); GL.DisableClientState(ArrayCap.VertexArray); GL.DisableClientState(ArrayCap.ColorArray); GL.DisableClientState(ArrayCap.TextureCoordArray); GL.Disable(EnableCap.Texture2D); }