我只想知道为什么有这么多东西定义为指向OpenGL中内存地址的宏?

我到处都看到它们。例如,当我为诸如glDrawArrays()之类的函数选择参数时,我必须选择像GL_TRIANGLES这样的模式作为第一个参数,它是一个与其他所有参数一样的宏。

#1 楼

这些不是指向内存地址的宏。它们只是整数预处理器常量。早在OpenGL起源的时代,在C中经常使用预处理程序常量作为数字常量。更改OpenGL为时已晚。

评论


$ \ begingroup $
谢谢!因此,这些C常量只是被那些看起来像内存地址的整数值所取代,这是错误的,但是那些整数实际上代表什么呢?
$ \ endgroup $
–mbl
16 Dec 13 '18:06

$ \ begingroup $
@mbl它们什么都不代表,它们只是在OpenGL规范中定义的任意分配的值,因此应用程序和GL驱动程序可以相互通信。
$ \ endgroup $
–内森·里德(Nathan Reed)
16 Dec 13 '18:14

$ \ begingroup $
@Dan,顺便说一句,“单元素结构”是什么意思?如今,我希望为此使用C / C ++中的枚举。
$ \ endgroup $
–内森·里德(Nathan Reed)
16年12月13日在18:15

$ \ begingroup $
@NathanReed枚举在C ++中很好,但是在C中它们可以从整数和其他枚举中隐式转换,因此它们仅提供常量的名称,而不提供类型安全性。如今,我猜您可以依靠编译器在适当的时候发出警告,即使在C语言中也是如此。
$ \ endgroup $
–丹·赫尔姆
16年12月13日在18:47

$ \ begingroup $
@DanHulme:C不是类型安全的语言,所以这是可以预期的。
$ \ endgroup $
–尼科尔·波拉斯(Nicol Bolas)
16年12月14日在21:16