将OpenGL 4.5代码降级为OpenGL 3.0



我找到了一个repo来解决OpenGL的问题,但它都是用GL 4.5编写的,我正在编写的应用程序需要是GL 3.0代码才能支持OSX。我已经能够通过在文档中引用它来翻译大部分代码。GL,并将其转换回我熟悉的3.0代码。

我一直在努力理解下面的代码,所以我只是想知道是否有人能为我指明正确的方向。

vertexArrayvertexBufferindexBuffer都是int

GL.VertexArrayVertexBuffer(vertexArray, 0, vertexBuffer, IntPtr.Zero, Unsafe.SizeOf<ImDrawVert>());
GL.VertexArrayElementBuffer(vertexArray, indexBuffer);
GL.EnableVertexArrayAttrib(vertexArray, 0);
GL.VertexArrayAttribBinding(vertexArray, 0, 0);
GL.VertexArrayAttribFormat(vertexArray, 0, 2, VertexAttribType.Float, false, 0);
GL.EnableVertexArrayAttrib(vertexArray, 1);
GL.VertexArrayAttribBinding(vertexArray, 1, 0);
GL.VertexArrayAttribFormat(vertexArray, 1, 2, VertexAttribType.Float, false, 8);
GL.EnableVertexArrayAttrib(vertexArray, 2);
GL.VertexArrayAttribBinding(vertexArray, 2, 0);
GL.VertexArrayAttribFormat(vertexArray, 2, 4, VertexAttribType.UnsignedByte, true, 16);

编辑:如果有人想知道的话,我将OpenTK与C#结合使用。

对于将来偶然遇到这个特定问题的人,我必须阅读GL 4.5代码的描述,并将其与GL 3.0代码进行匹配。

对于这个特定的代码片段,它变成:

GL.BindVertexArray(vertexArray);
GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBuffer);
GL.BindBuffer(BufferTarget.ElementArrayBuffer, indexBuffer);
GL.EnableVertexAttribArray(0);
GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, Unsafe.SizeOf<ImDrawVert>(), 0);
GL.EnableVertexAttribArray(1);
GL.VertexAttribPointer(1, 2, VertexAttribPointerType.Float, false, Unsafe.SizeOf<ImDrawVert>(), 8);
GL.EnableVertexAttribArray(2);
GL.VertexAttribPointer(2, 4, VertexAttribPointerType.UnsignedByte, true, Unsafe.SizeOf<ImDrawVert>(), 16);