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

标签 c++ opengl glsl

我目前正在 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/

相关文章:

c++ - 开关内的外壳不停地循环,即使我已经中断

c# - 将 C# 中的 "from ... in "迭代转换为 C++ (Qt)

opengl - 确定相邻像素的纹理位置

c++ - 使用 wprintf 打印 opengl 着色器编译日志

c++ - freeglut/glu 3d 绘图

OpenGL:计算着色器工作组是否并行执行?

opengl - OpenGL 3、OpenGL 4 实现中的已知错误

c++ - 给定文件名,如何使用 Crypto++ 获取 Adler32

c++ - MFC 单选按钮组消息处理程序

c++ - Visual Studio 2015 不会链接 GLFW