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