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