public static void PrepareForUse(VertexDeclaration vd) { GLStateManager.VertexArray(true); bool normal = false; bool texcoord = false; foreach (var ve in vd.GetVertexElements()) { switch (ve.VertexElementUsage) { case VertexElementUsage.Position: GL11.VertexPointer( ve.VertexElementFormat.OpenGLNumberOfElements(), ve.VertexElementFormat.OpenGLValueType(), vd.VertexStride, //ve.Offset (IntPtr)ve.Offset ); break; case VertexElementUsage.Color: GL11.ColorPointer( ve.VertexElementFormat.OpenGLNumberOfElements(), ve.VertexElementFormat.OpenGLValueType(), vd.VertexStride, //ve.Offset (IntPtr)ve.Offset ); break; case VertexElementUsage.Normal: GL11.NormalPointer( ve.VertexElementFormat.OpenGLValueType(), vd.VertexStride, //ve.Offset (IntPtr)ve.Offset ); normal = true; break; case VertexElementUsage.TextureCoordinate: GL11.TexCoordPointer( ve.VertexElementFormat.OpenGLNumberOfElements(), ve.VertexElementFormat.OpenGLValueType(), vd.VertexStride, //ve.Offset (IntPtr)ve.Offset ); texcoord = true; break; default: throw new NotImplementedException(); } } GLStateManager.TextureCoordArray(texcoord); GLStateManager.NormalArray(normal); }
public static void PrepareForUse(VertexDeclaration vd, IntPtr arrayStart) { GLStateManager.VertexArray(true); bool normal = false; bool color = false; bool texcoord = false; foreach (var ve in vd.GetVertexElements()) { switch (ve.VertexElementUsage) { case VertexElementUsage.Position: /* TODO GL.VertexPointer( * ve.VertexElementFormat.OpenGLNumberOfElements(), * ve.VertexElementFormat.OpenGLValueType(), * vd.VertexStride, * new IntPtr(arrayStart.ToInt32() + ve.Offset) * );*/ break; case VertexElementUsage.Color: /* TODO GL.ColorPointer( * ve.VertexElementFormat.OpenGLNumberOfElements(), * ve.VertexElementFormat.OpenGLValueType(), * vd.VertexStride, * new IntPtr(arrayStart.ToInt32() + ve.Offset) * );*/ color = true; break; case VertexElementUsage.Normal: /* TODO GL.NormalPointer( * ve.VertexElementFormat.OpenGLValueType(), * vd.VertexStride, * new IntPtr(arrayStart.ToInt32() + ve.Offset) * );*/ normal = true; break; case VertexElementUsage.TextureCoordinate: /* TODO GL.TexCoordPointer( * ve.VertexElementFormat.OpenGLNumberOfElements(), * ve.VertexElementFormat.OpenGLValueType(), * vd.VertexStride, * new IntPtr(arrayStart.ToInt32() + ve.Offset) * );*/ texcoord = true; break; default: throw new NotImplementedException(); } } GLStateManager.TextureCoordArray(texcoord); GLStateManager.ColorArray(color); GLStateManager.NormalArray(normal); }
internal void UnsetGraphicsStates() { // Make sure we are not user any shaders GL.UseProgram(0); // if primitives were used then we need to reset them if (resetVertexStates) { GLStateManager.VertexArray(false); GLStateManager.ColorArray(false); GLStateManager.NormalArray(false); GLStateManager.TextureCoordArray(false); resetVertexStates = false; } GL.PopMatrix(); }