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_TRIANGLESGL_LINE_STRIP 之间无缝工作,但是没关系,一切都很好。

然后今天我重新引入了一些旧代码,并在其中找到 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)。我查了一下,人们说虽然 GL_BACKGL_FRONT 在 3.3 核心上下文中已弃用,但 glPolygonMode 未被弃用,尽管只有 GL_FRONT_AND_BACK 作为第一个参数支持。所以我尝试使用 GL_LINE 作为第二个参数,以及 glDraw*(GL_TRIANGLES...) 并且它不仅完美地工作,它还需要 none 的顶点显式重新排序以适应 GL_LINE_STRIP。 (我回到了早期的配置来测试这个)。

问题:

  1. 在 3.3 核心上下文中我应该使用什么?两种方法都可以吗?我问的原因是我想知道 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 行是否真的给了我一个核心配置文件,因为它毕竟只是对 GLFW 的提示。

  2. 推荐哪种方法?对后者有性能影响吗?看起来确实方便很多。

  3. 如果可以通过 glPolygonMode 完成,为什么还要 glDraw*(GL_LINE*...)

广告 1:两种方法在 OpenGL 核心配置文件中都非常好。

广告 2:我不确定这一点,但我猜不会有太大的性能差异。

广告 3:存在此方法是因为人们可能还想绘制不是由三角形组成的线对象。例如圆圈甚至直线。