当获取
GL_POLYGON_MODE
、glGetIntergerv(GL_POLYGON_MODE, data)
的模式时,我必须将 data
制作为大小为 2 的整数数组。
因为我在某处读过:
params 返回两个值:符号常量,指示正面和背面多边形是否光栅化为点、线或填充多边形。初始值为 GL_FILL。请参阅 glPolygonMode。
所以一个是
GL_FRONT
(data[0]
),另一个是GL_BACK
(data[1]
)。
但自 OpenGL3.2 起,
GL_FRONT
和 GL_BACK
的 PolygonMode 面值已被弃用,无论哪个面被光栅化,多边形始终以相同的模式绘制。(https://stackoverflow.com/a/ 19672297/9629055)
意味着您只能在
GL_FRONT_AND_BACK
中使用 glPolygonMode
,不再可以使用 glPolygonMode(GL_FRONT, GL_LINE)
或 glPolygonMode(GL_BACK, GL_LINE)
。
所以我的问题是:
glGet
仍然为GL_POLYGON_MODE
返回两个值,而你只能使用GL_FRONT_AND_BACK
,我只期望一个值,因为正面和背面总是处于相同的模式。glGetIntegerv(GL_POLYGON_MODE, data)
时,data[0]
总是等于data[1]
吗?OpenGL4参考页中找不到
GL_POLYGON_MODE
的描述,还在建设中吗?GL_FRONT_AND_BACK
仍然设置两个值:前面的值和后面的值。无法将它们设置为不同的值并不会改变功能上有两个单独值的事实。
现在,它们是两个单独值的主要原因是与兼容性配置文件的兼容性。核心配置文件代码(正面和背面始终相同)应该能够在兼容性上下文中工作(正面和背面可以不同)。因此,如果
glGetIntegerv
在兼容性中返回 2 个值,但在兼容性上下文中运行的核心、基于核心的代码中只有一个值可能会导致缓冲区溢出,因为它们只会将单个整数发送到将填充数组的内容2.
这很糟糕。
但是从 OpenGL3.2 开始,GL_FRONT 和 GL_BACK 的 PolygonMode 面值已被弃用
仅供参考:它们已被删除;使用这些枚举是错误的。 “已弃用”和“已删除”不是一回事。