我尝试开发一个使用 OpenGL PPAPI Wrapper 渲染 3D 图形的 PPAPI 插件(在 Chromium 应用程序中)。此外,我想利用一个 EGL 扩展,它允许我访问在另一个进程中呈现的共享 DirectX 纹理。我想在 PPAPI 的 Graphics3D OpenGL 上下文中使用这个纹理(以在插件的 UI 元素中显示它)。
在 PPAPI 插件中,我能够访问共享的 D3D 纹理并创建一个 EGL 表面(即实际上是一个 PBuffer,使用 eglCreatePbufferFromClientBuffer)。但是,我假设当尝试将此表面绑定到插件的 OpenGL 上下文中的 OpenGL 纹理时,我的 EGLSurface 与我在 PPAPI 的 OpenGL 上下文中创建的纹理处于不同的上下文中。
EGLSurface eglSurface = eglCreatePbufferFromClientBuffer(eglDisplay, EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE, m_SharedTextureHandle, eglConfig, pBufferAttributes);
eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
glGenTextures(1, &m_glSharedTex);
glBindTexture(GL_TEXTURE_2D, m_glSharedTex);
eglBindTexImage(eglDisplay, eglSurface, EGL_BACK_BUFFER)
这可能是由于我设置了自己的 EGLDisplay 和自己的 EGLContext
EGLDisplay eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLContext eglContext = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, pContextAttributes));
但是,尝试使用现有上下文 eglGetCurrentContext() 会返回 EGL_NO_CONTEXT,与显示相同。
所以我需要的是访问插件的实际 EGLContext。我怎样才能做到这一点?我可以以某种方式在 EGL 中共享使用 glSetCurrentContextPPAPI() 创建的上下文吗?感谢您对此的任何提示!