如果片段着色器执行时间太长,多线程会有帮助吗?

时间:2016-03-14 06:13:43

标签: android multithreading opengl-es

目前,我正在使用OpenGL ES在Android上开发图像处理算法。输入图像的大小非常大(如4000x6000像素),算法需要多次迭代。在我的实现中,我在片段着色器中编写了代码,并设置了一个FBO纹理来表示渲染到纹理的东西。

然而,它需要将近2~3秒。在此期间,使用OpenGL ES渲染的UI层也会冻结。用户无法与之交互。在优化着色器代码之前,我想知道GPU是否可以同时运行两个着色器。

那么,我如何保持我的UI活跃?我是否需要多个上下文,一个上下文呈现UI,另一个上下文执行渲染到纹理着色器?

1 个答案:

答案 0 :(得分:0)

是的,这是一个非常标准的程序。您需要将该过程放入一个单独的线程中,这也可以创建一个新的上下文。

要从第二个上下文接收数据(例如纹理)并在主上下文中使用它,您需要查看共享上下文。如果您不创建共享上下文,则无法将数据从一个上下文传输到另一个上下文。

您将打开的其他线程的数量取决于您正在做什么,但通常最安全的是只有一个后台线程。所以基本上你想创建一个将在另一个线程中运行的worker,你可以为它分配任务。您需要注意如何处理来自工作者的回调,但多线程很容易产生问题。