在避免与OpenGL中的批处理渲染冲突时,我该怎么办?

时间:2017-06-07 06:53:05

标签: opengl render

说,我有一些渲染单位按照相机顺序排序。

例如ru0, ru1, ru2, ru3, ru4, ru5...。这样做的目的是避免z深度测试过度绘制。

但是,在批量渲染视图中,这是一种浪费。

假设ru1, ru3, ru5具有相同的渲染状态(相同的opengl状态和相同的着色器程序),所以应该对它们进行批处理并一次渲染。

但是,这不是要避免透支让我这么做。

所以,我的问题是,这是一个基于特定场景的问题(例如在某些情况下,透支的消耗时间不超过opengl状态改变消耗)或者还有另一种方式解决这个问题?

注意,我的所有渲染单位都是不透明的,所以我不会在这里考虑透明单位。

1 个答案:

答案 0 :(得分:0)

现代硬件很可能实现"Early z-test",即在运行片段(像素)着色器之前执行深度测试。或者,它可以手动实现。

因此,按州排序可能更有利,除非您有透明度问题。在后一种情况下,您可能需要查看"Order-independent transparency"

无论如何,不​​要相信任何人。测量(配置文件)并在优化任何内容之前进行比较。