我在我的应用程序中使用Open GL ES 3.1,我遇到了一个问题,到目前为止我无法修复。
当我尝试创建一个3D对象时,根据构造函数的调用位置,正确创建对象(并且可以成功显示)或应用程序崩溃,因为无法创建着色器(调用glCreateShader()
返回0)。这让我说我的着色器代码是正确的。
当我尝试使用glGetError()
获取有关错误的信息时,即使返回的着色器为0,我也会收到GL_NO_ERROR
!
我还添加了setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS)
,但它没有给我任何线索。
我认为问题可能是由于并发访问Open GL环境引起的,并且我的绘图和动画方法已同步,但它也没有帮助。
根据这个问题Compile GLSL shader asynchronously or in a different thread on Android,我很确定问题来自于在一个单独的线程中使用主要Open GL环境的不可能性。但我无法确定这一点,因为给出的代码使用了我在Open GL ES 3.1库(EGLContext2
,eglCreateContext
,eglCreatePbufferSurface
)中找不到的类。
有谁知道我如何从我的第二个线程访问Open GL ES环境?
您需要为第二个线程创建第二个EGL上下文,并将其放在与第一个上下文相同的共享组中,以便它们可以共享资源。您可以通过在为第二个上下文调用share_context
时将第一个上下文作为eglCreateContext()
参数提供。
但我无法确定这一点,因为给出的代码使用了我在Open GL ES 3.1库(
EGLContext2
,eglCreateContext
,eglCreatePbufferSurface
)中找不到的类。
由于函数前缀可能会泄露,因此对于上下文创建,您需要EGL库而不是GL库。