glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) 与 glDraw*(GL_LINE_STRIP...)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) vs. glDraw*(GL_LINE_STRIP...)
我今天有一个有趣但令人困惑的发现。
到目前为止,我使用 glDraw*(GL_LINE_STRIP...)
(或相关的 GL_LINE*
绘制模式)已经很好了。当然,这总是需要对顶点进行一些重新排序,以使相同的顶点数据在 GL_TRIANGLES
和 GL_LINE_STRIP
之间无缝工作,但是没关系,一切都很好。
然后今天我重新引入了一些旧代码,并在其中找到 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
。我查了一下,人们说虽然 GL_BACK
和 GL_FRONT
在 3.3 核心上下文中已弃用,但 glPolygonMode
未被弃用,尽管只有 GL_FRONT_AND_BACK
作为第一个参数支持。所以我尝试使用 GL_LINE
作为第二个参数,以及 glDraw*(GL_TRIANGLES...)
并且它不仅完美地工作,它还需要 none 的顶点显式重新排序以适应 GL_LINE_STRIP
。 (我回到了早期的配置来测试这个)。
问题:
在 3.3 核心上下文中我应该使用什么?两种方法都可以吗?我问的原因是我想知道 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
行是否真的给了我一个核心配置文件,因为它毕竟只是对 GLFW 的提示。
推荐哪种方法?对后者有性能影响吗?看起来确实方便很多。
如果可以通过 glPolygonMode
完成,为什么还要 glDraw*(GL_LINE*...)
?
广告 1:两种方法在 OpenGL 核心配置文件中都非常好。
广告 2:我不确定这一点,但我猜不会有太大的性能差异。
广告 3:存在此方法是因为人们可能还想绘制不是由三角形组成的线对象。例如圆圈甚至直线。
我今天有一个有趣但令人困惑的发现。
到目前为止,我使用 glDraw*(GL_LINE_STRIP...)
(或相关的 GL_LINE*
绘制模式)已经很好了。当然,这总是需要对顶点进行一些重新排序,以使相同的顶点数据在 GL_TRIANGLES
和 GL_LINE_STRIP
之间无缝工作,但是没关系,一切都很好。
然后今天我重新引入了一些旧代码,并在其中找到 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
。我查了一下,人们说虽然 GL_BACK
和 GL_FRONT
在 3.3 核心上下文中已弃用,但 glPolygonMode
未被弃用,尽管只有 GL_FRONT_AND_BACK
作为第一个参数支持。所以我尝试使用 GL_LINE
作为第二个参数,以及 glDraw*(GL_TRIANGLES...)
并且它不仅完美地工作,它还需要 none 的顶点显式重新排序以适应 GL_LINE_STRIP
。 (我回到了早期的配置来测试这个)。
问题:
在 3.3 核心上下文中我应该使用什么?两种方法都可以吗?我问的原因是我想知道
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
行是否真的给了我一个核心配置文件,因为它毕竟只是对 GLFW 的提示。推荐哪种方法?对后者有性能影响吗?看起来确实方便很多。
如果可以通过
glPolygonMode
完成,为什么还要glDraw*(GL_LINE*...)
?
广告 1:两种方法在 OpenGL 核心配置文件中都非常好。
广告 2:我不确定这一点,但我猜不会有太大的性能差异。
广告 3:存在此方法是因为人们可能还想绘制不是由三角形组成的线对象。例如圆圈甚至直线。