opengl - glGen* 与 glCreate* 命名约定

标签 opengl

我浏览了 OpenGL 标准,寻找对此的解释......为什么某些对象(着色器对象)使用以前缀 开头的函数glCreate 并且某些对象(缓冲区对象)使用以前缀 开头的函数glGen ?这有语义原因吗?

最佳答案

glGen…函数回到 OpenGL-1.1 ( glGenTextures ) 并用于创建对象名称,而无需实际初始化对象。然而,大多数情况下,这些函数一次仅用于创建一个对象名称。因此,大多数情况下,您可以只返回一个整数,而不是将指针传递给缓冲区和缓冲区的大小。

当 3Dlabs 引入 GLSL 时,他们试图打破旧的 glGen…使 OpenGL API 现代化的约定。

是的,这有点无关紧要,坦率地说,我更喜欢 GLSL API 使用 glGen…命名约定。但我们被困在 glCreateShaderglCreateProgram就是这样。

如果你想有一个单一的命名约定,你可以编写以下包装器:

GLuint glCreateTexture(void) { GLuint name; glGenTextures(1, &name); return name; }
GLuint glCreateBuffer(void) { GLuint name; glGenTextures(1, &name); return name; }
...

关于opengl - glGen* 与 glCreate* 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441430/

相关文章:

objective-c - 将 OpenGL 与 Cocoa 结合使用的最佳方式是什么?

c - opengl模型纹理坐标问题

opengl - 在 OpenGL 中,背景对象绘制在前景对象的前面?

OpenGL:实现变换矩阵堆栈

c++ - 旋转模型矩阵时的形状变形

c++ - opengl 着色器程序中的重复顶点

opengl - 这些 ' undefined reference to __glut*WithExit ' OpenGL 链接器错误的含义是什么?

java - UnicodeFont 渲染似乎阻止了其他所有内容的渲染?

python - 如何给三角形添加纹理?

c - GLSL 布局属性编号