Multithreading EGL和opengl es2中的启动屏幕

Multithreading EGL和opengl es2中的启动屏幕,multithreading,opengl-es-2.0,Multithreading,Opengl Es 2.0,我需要向opengl es2应用程序添加一个启动屏幕,该应用程序使用EGL与窗口系统交互。 应用程序需要几秒钟来加载资源、建立连接等等,在此期间,我需要绘制一个启动屏幕。窗口和EGL上下文是创建的第一件事,所以我有所有我需要做的事情 我在网上看到过一些帖子,它们描述了如何创建另一个可以在不同线程中使用的上下文,但实际上很少有细节 问题是,我是否需要创建将在工作线程本身中使用的GL资源?例如,着色器需要在工作线程中编译和链接,还是可以在主线程中编译/链接?线程的上下文本身呢?这可以在主线程中创建吗

我需要向opengl es2应用程序添加一个启动屏幕,该应用程序使用EGL与窗口系统交互。 应用程序需要几秒钟来加载资源、建立连接等等,在此期间,我需要绘制一个启动屏幕。窗口和EGL上下文是创建的第一件事,所以我有所有我需要做的事情

我在网上看到过一些帖子,它们描述了如何创建另一个可以在不同线程中使用的上下文,但实际上很少有细节


问题是,我是否需要创建将在工作线程本身中使用的GL资源?例如,着色器需要在工作线程中编译和链接,还是可以在主线程中编译/链接?线程的上下文本身呢?这可以在主线程中创建吗?一切都需要在工作线程中创建还是无关紧要?

所有OpenGL ES操作都应该从它的线程中完成。这包括GLSurfaceView、GLRenderer等。什么是GLSurfaceView?该应用程序在linux/X11上运行,而不是在Android上运行。那么我还需要从主线程调用eglMakeCurrent()吗?“所有opengl ES”操作是什么意思?显然,我必须从工作线程中进行绘制,因此一些gl操作必须在线程上进行。你是说EGL操作吗?我在等待回复的时候一直在测试东西,我认为你在这里的建议似乎是正确的。每当我试图在线程中编译着色器或调用eglMakeCurrent时,我都会遇到一个可怕的崩溃,没有回溯。不过,恕我直言,任何EGL操作都应该从渲染线程完成。此外,根据Khronos论坛上的帖子:
绝不允许将两个不同线程中的两个不同上下文绑定到同一个曲面。将2个不同线程中的2个不同上下文绑定到2个不同的表面可能是允许的,但可能会失败。
那篇文章已经有9年的历史了,在这段时间里,事情可能发生了变化。