为什么使用 GL_POLYGON_MODE 的 glGet 返回两个值?

问题描述 投票:0回答:1

当获取

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)

所以我的问题是:

  1. 为什么
    glGet
    仍然为
    GL_POLYGON_MODE
    返回两个值,而你只能使用
    GL_FRONT_AND_BACK
    ,我只期望一个值,因为正面和背面总是处于相同的模式。
  2. 可以安全地假设当我写这个
    glGetIntegerv(GL_POLYGON_MODE, data)
    时,
    data[0]
    总是等于
    data[1]
    吗?
  3. 还有,为什么现在(2024年4月29日)在
    OpenGL4参考页
    中找不到GL_POLYGON_MODE的描述,还在建设中吗?
c++ opengl opengl-4
1个回答
0
投票

GL_FRONT_AND_BACK
仍然设置两个值:前面的值和后面的值。无法将它们设置为不同的值并不会改变功能上有两个单独值的事实。

现在,它们是两个单独值的主要原因是与兼容性配置文件的兼容性。核心配置文件代码(正面和背面始终相同)应该能够在兼容性上下文中工作(正面和背面可以不同)。因此,如果

glGetIntegerv
在兼容性中返回 2 个值,但在兼容性上下文中运行的核心、基于核心的代码中只有一个值可能会导致缓冲区溢出,因为它们只会将单个整数发送到将填充数组的内容2.

这很糟糕。

但是从 OpenGL3.2 开始,GL_FRONT 和 GL_BACK 的 PolygonMode 面值已被弃用

仅供参考:它们已被删除;使用这些枚举是错误的。 “已弃用”和“已删除”不是一回事。

© www.soinside.com 2019 - 2024. All rights reserved.