gpt4 book ai didi

java - 在 Android 上的 OpenGL 上下文之间共享资源

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:19 25 4
gpt4 key购买 nike

我正在尝试使用多个 EGL 上下文在我的主线程之外加载纹理。我在 eglCreateContext 调用后收到了一个 EGL_BAD_CONTEXT 错误。

在我的 android.opengl.Renderer 中

public void onSurfaceCreated (javax.microedition.khronos.opengles.GL10 gl, EGLConfig config) {
// ...
EGLContext sharedContext = egl.getCurrentContext();
EGLDisplay display = eglGetCurrentDisplay();
eglCreateContext(display, config, sharedContext, new int[] { EGL_CONTEXT_CLIENT_VERSION, 2 } );
}

EGL_BAD_CONTEXT 引导我找到文档 here , 就是说

EGL_BAD_CONTEXT is generated if share_context is not an EGL rendering context of the same client API type as the newly created context and is not EGL_NO_CONTEXT.

这就是为什么我在 EGL_CONTEXT_CLIENT_VERSION 参数中添加的原因,但它似乎没有任何效果。

我看到的是,即使我收到此错误,上下文似乎也是半有效的。我可以在另一个线程上使用它

egl.eglMakeCurrent(display, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, context);

在此之后,在该线程上创建纹理不会导致错误。但我确实看到纹理名称没有共享,每个线程似乎都从 0 本身开始计数。


我的下一个假设是我需要在上下文之间共享表面。但是,如果我通过相同的表面从原始上下文进入我的 eglMakeCurrent,但是我完全失败了

E/AndroidRuntime(3210): java.lang.IllegalArgumentException
E/AndroidRuntime(3210): at com.google.android.gles_jni.EGLImpl._eglCreateContext(Native Method)
E/AndroidRuntime(3210): at com.google.android.gles_jni.EGLImpl.eglCreateContext(EGLImpl.java:54)

我感觉好像我几乎在那里,有人知道缺少什么吗?

最佳答案

结果,多亏了 this question 的一些帮助:

我的次要上下文需要一个表面。它与原始上下文的表面相同。

我需要使用 eglCreatePbufferSurface 创建新的表面。我之前尝试这样做失败的原因是它默认的宽度和高度为 0。通过将其设置为 1x1 表面,它可以完美地工作。

egl.eglCreatePbufferSurface(display, config, new int[] { EGL10.EGL_WIDTH, 1, EGL10.EGL_HEIGHT, 1, EGL10.EGL_NONE });

关于java - 在 Android 上的 OpenGL 上下文之间共享资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39732410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com