我正在开发一款应用程序,可以对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运行。
我还尝试过前面提到的类似应用程序(纸质相机和卡通相机),与我的galaxy s2相比,它们的运行速度也相当慢,即使它们因为更好的硬件而应该运行得更快。
tegra GPU是否有任何关于纹理上传速度的问题(我必须为每个视频帧创建一个纹理)或其他可能会降低速度的东西吗?
PS:降低相机预览分辨率使其稍微快一些,但仍然非常慢。
答案 0 :(得分:1)
问题可能出在片段着色器本身上,我在不同的GPU上使用着色器进行了很多工作,而且我总是发现没有更快的GPU意味着对着色器的更快解释。 您是否在片段着色器('if'条件)中使用了大量分支,或者在着色器中调用其他函数?如果是这样,那么你应该尝试避免分支,也要将代码的函数内联到一个,并测试内置函数的GLSL,这些函数可能在当前的gpu驱动程序实现上有问题,然后编写自己的替换。