为什么在opengl 3.2之后不推荐使用GL_FRONT和GL_BACK

vik*_*eid 4 opengl polygon

在glPolygonMode,从OpenGL 3.2开始,我无法单独传递GL_FRONT或GL_BACK.例如glPolygonMode(GL_FRONT,GL_LINE); 生成无效的枚举:(生成GL_INVALID_ENUM错误.当前配置文件中禁用了多边形模式.)

有人可以解释为什么这个被弃用了?为什么我必须传入两个面(GL_FRONT_AND_BACK)

如果我想要"填充"正面,然后"完全填充"多边形的背面怎么办?

不幸的是,这个链接(http://www.opengl.org/sdk/docs/man/xhtml/glPolygonMode.xml)没有提及任何相关内容.至少它应该已经提到它们为什么会被弃用或者你怎么能以不同的方式填充这些面孔.

And*_*man 6

如果每侧需要不同的填充模式,则可以绘制两次多边形,每次都剔除不同的边.

您应该认为自己很幸运,甚至存在于OpenGL 3.2核心中,因为它已从OpenGL ES中删除.此外,在D3D中,您始终无法指定每边的多边形填充模式.

实际上,您可以在OpenGL 3.2中使用几何着色器和片段着色器的组合来实现您自己的真正高级填充模式(并且每侧都这样做).由于原始组装流水线现在是可编程的,因此抛弃一些没有专用固定功能硬件的东西是有意义的(授权填充模式在技术上是光栅化状态).同样,固定功能alpha测试被删除,因为它现在可以在片段着色器中完成.


至于弃用GL_FRONTGL_BACK讨论的地方,你必须阅读核心规范才能找到它.

OpenGL 3.2核心配置文件 - E.2.弃用和删除的功能 - 第332页

单独的多边形绘制模式 - PolygonMode面值GL_FRONTGL_BACK; 无论哪个面被栅格化,多边形总是以相同的模式绘制.

如果浏览3.2核心中已弃用的完整列表,您会发现有很多与每面光栅化相关的内容被删除了.幸运的是,我们仍然有双面模板,但当然这可以追溯到模板测试不可编程的事实.