更快的全屏渲染(OpenGL / glsl)?

时间:2016-10-25 15:12:30

标签: c++ opengl glsl

我目前正在Opengl 3.3中编写一个带有大量全屏幕后处理功能的引擎(3遍,用于模糊阴影,灯光等......)。

对于每次传球,我必须渲染覆盖整个屏幕的完全相同的2个三角形。并且必须逐个生成完全相同的片段,这些片段恰好是窗口的所有像素。

该发动机目前在GeForce 570上以令人满意的200 FPS运行,但它在英特尔集成显卡上以15 FPS左右的速度挣扎。

如果我将窗口的分辨率减半并相应地调整纹理,它的运行速度会快3倍。所以它绝对受GPU限制并受到后期处理量的限制。

对我来说,每秒600次生成完全相同的碎片似乎很浪费。所以我的问题如下, OpenGL 3/4中是否有任何专门用于简化全屏渲染的功能,例如告诉OpenGL他试图生成的片段只是矩形的屏幕,没有猜测吗?

1 个答案:

答案 0 :(得分:0)

  

OpenGL 3/4中是否有任何专门用于简化全屏渲染的功能,例如告诉OpenGL他试图生成的片段只是屏幕的矩形而且没有猜测可做?

不,没有。但即使有,也没关系。

在多阶段化学合成中,存在“速率确定步骤”的概念。也就是说,如果你有A产生B的反应,以及B产生C的进一步反应,其中一个反应将比另一个慢(通常很多慢)。那个是决定利率的步骤:整个过程永远不会比最慢的步骤更快。

如果A-> B需要0.01秒,而B-> C需要1秒,则整个过程将花费1秒。 0.99秒,会有很多B坐在那里,等待变成C.所以如果你找到一种方法让A-> B花费0.001秒,那真的没关系;如果你想要C,它仍然需要1秒才能得到它。

这里也一样。您想在场景上进行后处理传递。嗯,这需要大量的带宽和FS计算资源。处理CPU命令和生成三角形所花费的时间是带宽和FS时间旁边的平凡

因此,即使您可以将此过程的快速部分稍微加快一点,也不会对您的整体性能产生任何影响。这些命令只是坐在那里,等待带宽和FS资源可用。