1

我正在开发一个应用程序,对 GPU 上的相机预览流进行实时过滤(OpengGL ES 2.0)。它类似于著名的应用程序“纸相机”(付费)和“卡通相机”(免费)。

它在我的 Galaxy s2 上运行良好且速度非常快,在 s3 上甚至更快,在旧的三星设备上也可以。我还在 Sony Xperia Arc S 和 htc 的欲望上以及我不记得的其他几台设备上对其进行了测试,在这些设备上它的速度不如我的 s2 但至少高于 10 fps。

现在问题来了:昨天我能够在 HTC One X+ 和 Galaxy Tab 10.1(分别为 tegra 3 和 tegra 2)上测试它。在 x+ 上,它以大约 5 fps 的速度运行,在平板电脑上以大约 2 fps 的速度运行。

我还在 x+ 上尝试了前面提到的类似应用程序(纸质相机和卡通相机),与我的 Galaxy s2 相比,它们的运行速度也慢得多,尽管由于硬件更好,它们应该运行得更快。

tegra GPU 是否存在与纹理上传速度有关的已知问题(我必须为每个视频帧创建一个纹理)或其他可以大大降低速度的问题?

PS:降低相机预览分辨率可以让它稍微快一些,但它仍然慢得令人讨厌。

4

1 回答 1

1

可能问题出在片段着色器本身上,我在不同 GPU 上使用着色器进行了很多工作,而且我一直发现并不是更快的 GPU 意味着对着色器的更快解释。您是否在片段着色器中使用了大量分支(“if”条件),或者调用着色器中的其他函数?如果是这样,那么您应该尽量避免分支,还将代码的函数内联为一个,并测试可能在当前 gpu 驱动程序实现上存在错误的 GLSL 内置函数,然后编写自己的替换。

于 2012-12-12T13:33:59.060 回答