我目前正在 Opengl 3.3 中编写一个带有大量全屏后处理的引擎(3 遍,用于模糊阴影、灯光等...)。
对于每一遍,我都必须渲染覆盖整个屏幕的完全相同的 2 个三角形。而且还得一个一个生成完全相同的片段,也就是窗口的所有像素点。
该引擎目前在 GeForce 570 上以令人满意的 200 FPS 运行,但在 Intel 集成显卡上却在 15 FPS 左右挣扎。
如果我将窗口的分辨率减半并相应地调整纹理,它的运行速度将提高大约 3 倍。所以它肯定受 GPU 限制,并受后处理量的限制。
对我来说,每秒生成 600 次完全相同的片段似乎很浪费。所以我的问题如下,在 OpenGL 3/4 中是否有任何专门为简化全屏渲染而设计的功能,例如通过告诉 OpenGL 他试图生成的片段只是屏幕的矩形并且没有猜测做什么?
最佳答案
is there any feature in OpenGL 3/4 specifically designed for simplifying full-screen rendering, for example by telling OpenGL that the fragments he's trying to generate are just the rectangle of the screen and there's no guesswork to do?
不,没有。但即使有,也没关系。
在多阶段化学合成中,有“速率决定步骤”的概念。也就是说,如果您有 A 生成 B 的 react ,以及 B 生成 C 的进一步 react ,那么这些 react 中的一个将比另一个慢(通常慢得多)。这一步是决定速率的步骤:整个过程永远不会比最慢的步骤快。
如果 A->B 耗时 0.01 秒,B->C 耗时 1 秒,则整个过程将耗时 1 秒。对于 0.99 秒,将会有很多 B 等待变成 C。所以如果你找到一种方法让 A->B 花费 0.001 秒真的没关系;如果你想要 C,它仍然需要 1 秒才能得到它。
这里也一样。您想要对场景进行后期处理。嗯,这需要大量带宽和 FS 计算资源。与带宽和 FS 时间相比,处理 CPU 命令和生成三角形所花费的时间微不足道。
因此,即使您可以使这个过程中已经很快的部分稍微快一些,这对您的整体表现也毫无意义。这些命令将只是坐在那里,等待带宽和 FS 资源可用。
关于c++ - 更快的全屏渲染(OpenGL/glsl)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243599/