我目前的渲染实现如下:
- 将所有顶点信息存储为四边形而不是三角形
- 对于三角形,只需重复最后一个顶点(即
v0 v1 v2 v2
) - 将顶点信息传递
lines_adjacency
给几何着色器 - 检查是四边形还是三角形,输出为
triangle_strip
我走这条路的原因是因为我正在实现一个线框着色器,并且我想绘制没有对角线穿过它们的四边形。但是,我已经放弃了这个功能。
我现在想知道是否应该回到简单的绘图GL_TRIANGLES
,并将几何着色器排除在等式之外。但这让我开始思考......从性能的角度来看,实际上什么更有效?
- 平均而言,我的场景由等量的四边形和三角形组成。
- 绘制所有三角形意味着:每个四边形 6 个顶点,每个三角形 3 个。
- 使用lines_adjacency 绘制意味着:每个四边形4 个顶点,每个三角形4 个。
- (这是索引绘图,因此它们的顶点缓冲区大小相同)
所以顶点比率是 9:8(三角形:lines_adjacency)。
假设使用索引绘图,每个顶点仅由顶点着色器处理一次(而不是每个索引一次),我是否正确?在这种情况下,绘制三角形会更有效(因为不需要执行额外的几何着色器步骤),唯一的缺点是索引占用的额外内存量很小。
再说一次,如果顶点确实每个索引处理一次,我可以看到边缘使用 lines_adjacency 方法,考虑到几何转换非常简单,而顶点着色器可能正在运行更密集的光照计算。
所以这几乎总结了我的问题:如何用索引绘图处理顶点,如果包含一个简单的几何着色器,可以预期什么样的性能影响?