我在我的应用程序中使用 Open GL ES 3.1,但我遇到了一个到目前为止无法解决的问题。当我尝试创建 3D 对象时,根据调用构造函数的位置,对象要么被正确创建(并且可以成功显示),要么应用程序崩溃,因为无法创建着色器(调用glCreateShader()返回 0)。这让我说我的着色器代码是正确的。当我尝试使用 获取有关错误的信息时,即使返回的着色器为 0 glGetError(),我也会收到!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 环境?
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
您需要为第二个线程创建第二个 EGL 上下文,并将其放置在与第一个上下文相同的共享组中,以便它们可以共享资源。为此,您可以share_context
在调用eglCreateContext()
第二个上下文时提供第一个上下文作为参数。
但我不能确定这一点,因为给出的代码使用了我在 Open GL ES 3.1 库 (
EGLContext2
,eglCreateContext
,eglCreatePbufferSurface
) 中找不到的类。
由于函数前缀可能会泄露,对于上下文创建,您需要 EGL 库而不是 GL 库。
添加回答
举报
0/150
提交
取消