-2

我只是在徘徊openGL是否有2个具有相同值的常量/符号。

4

2 回答 2

3

至少有一对:

#define GL_FALSE                          0
...
#define GL_NONE                           0
于 2013-10-10T19:38:26.467 回答
2

通常,对于标识特定状态的令牌,这永远不会发生,但它是特定于上下文的。正如在其他回应中所引发的,一些更通用的常量指的是概念而不是状态,它们将别名化;用于屏蔽位域中各个属性的常量也是如此。在相同的上下文中,两个不同的标记永远不会具有相同的值,因为不可能区分所有有效的传递值。但是,对于不能在同一函数中有意义地使用的标记:GL_TRIANGLES(0x04) 和GL_LINE_BITS(0x04),这种情况经常发生。

扩展是 OpenGL 的发展方式,它通过为供应商提供一部分枚举空间用于其扩展来分配命名常量。这可以防止合法/批准的扩展之间的冲突,并允许随着时间的推移修改扩展并引入新的令牌。

话虽如此,在从 EXT 状态迁移到 ARB 状态并最终采用核心 GL 的扩展过程中,有时会重复使用指向同一事物的令牌的常量值。恰当的例子:(GL_FRAMEBUFFER_EXT来自 EXT FBO 扩展)是0x8D40并且GL_FRAMEBUFFER(来自 ARB 扩展/核心 GL 3+)也是0x8D40.

附带说明一下,OpenGL 使用的枚举空间实际上只有 16 位(尽管GLenum被定义为 32 位数据类型)。API 最多可以使用 65,535 个不同的常量值,因此重用是不可避免的。

于 2013-10-10T22:53:56.177 回答