c# - 将 OpenGL 4.5 代码降级到 OpenGL 3.0
问题描述
我找到了一个 repo 来解决我在使用 OpenGL 时遇到的问题,但它都是用 GL 4.5 编写的,我正在编写的应用程序需要是 GL 3.0 代码才能支持 OSX。通过在docs.GL上引用它并将其转换回我熟悉的 3.0 代码,我已经能够翻译大部分代码。
我在理解下面的代码方面遇到了一些困难,所以我只是想知道是否有人能够指出我正确的方向。
vertexArray
vertexBuffer
indexBuffer
都是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);
推荐阅读
- postgresql - 如何使用 UUID 作为 Postgresql 中的外键与休眠
- javascript - 使用 JavaScript 自动滑动,试图让滑块在不点击的情况下滑动
- jolt - 颠簸变换嵌套分组
- java - Java Streams - 根据列表的值组成一个值
- python - Python:计算 HTML 中的特定单词
- math - 方阵的 sympy Exp 给出索引错误
- python - 如何设置次要刻度的范围?
- c# - 从 IFormFile 异常中获取内存流
- automation - 如何在 UiPath 的弹出面板上指示元素?
- laravel - 带有 nginx 服务器的 Lavarel 项目返回 404|未找到,但在默认 /var/www/html 根目录下工作正常