使用几何着色器和lines_adjacency绘制四边形和三角形的混合

时间:2013-11-29 21:41:23

标签: opengl 3d glsl mesh geometry-shader

我当前的渲染实现如下:

  • 将所有顶点信息存储为四边形而不是三角形
  • 对于三角形,只需重复最后一个顶点(即v0 v1 v2 v2
  • 将顶点信息作为lines_adjacency传递给几何着色器
  • 检查四边形或三角形,输出为triangle_strip

我走这条路的原因是因为我正在实现一个线框着色器,我想绘制没有对角线的四边形。但是,我已经放弃了这个功能。

我现在想知道是否应该回到简单地绘制GL_TRIANGLES,并将几何着色器从等式中移开。但这让我思考......从绩效的角度来看,实际上哪些更有效?

  • 平均而言,我的场景由等量的四边形和三角形组成。
  • 使用所有三角形绘制意味着:每个四边形有6个顶点,每个三角形有3个顶点。
  • 使用lines_adjacency绘图意味着:每个四边形4个顶点,每个三角形4个。
  • (这是带索引的绘图,所以顶点缓冲区的大小都相同)

因此顶点比率为9:8(三角形:lines_adjacency)。

假设使用索引绘图,每个顶点仅由顶点着色器处理一次(而不是每个索引一次),我是否正确?在这种情况下,绘制三角形将更有效(因为没有额外的几何着色器步骤可以执行),唯一的负面因素是指数占用的额外内存量。

然后,如果顶点每个索引处理一次,我可以看到边缘使用lines_adjacency方法,考虑到几何转换非常简单,而顶点着色器可能运行更多密集照明计算。

所以这几乎总结了我的问题:如何使用索引绘图处理顶点,如果包含一个简单的几何着色器,可以预期会产生哪种性能影响?

1 个答案:

答案 0 :(得分:1)

几何着色器从不在这种情况下提高效率,它们只会使原始装配过程复杂化。当您使用几何着色器时,T& L后缓存不再像最初设计的那样工作。

虽然几何着色器确实会重用顶点着色器阶段中转换的任何共享(索引)顶点,但需要获取顶点数据时,几何着色器仍会计算并发出一组唯一的顶点 每个输出原始

此外,由于允许几何着色器发出可变数量的数据点,因此它们与其他着色器阶段不同。并行化几何着色器比顶点或片段要困难得多。除非你确实需要使用它们,否则我会建议使用几何着色器太多负面的东西。