主要目标:
在一个线程中创建纹理。在另一个线程中使用纹理。
到目前为止我做了什么。
我创建了两个上下文和两个表面。并在主线程中使context1和surface1成为当前的。
surface1 = eglCreateWindowSurface(display, config, engine->app->window, NULL);
context1 = eglCreateContext(display, config, NULL, attribList);
context2 = eglCreateContext(display, config, context1, attribList);
eglMakeCurrent(display, surface1, surface1, context1)
eglQuerySurface(display, surface1, EGL_WIDTH, &w);
eglQuerySurface(display, surface1, EGL_HEIGHT, &h);
EGLint attribpbf[] =
{
EGL_HEIGHT, h,
EGL_WIDTH, w,
EGL_NONE
};
surface2 = eglCreatePbufferSurface(display, config, attribpbf);
现在我创建了一个新线程,在该线程中我将context2和surface2设为当前。
eglMakeCurrent(display, surface2, surface2, context2);
然后我创建了一个纹理并对纹理进行了一些渲染,然后我做了glFlush();
我在这里查了一下,纹理已成功创建。
之后尝试将此纹理用作主线程中的纹理附件。但结果是一个黑色的空白屏幕。没有GL错误。我认为纹理没有成功共享。
请你告诉我我做错了什么。有些情况下无法分享纹理。
答案 0 :(得分:0)
我认为你遇到了同步问题,这意味着你在context1中渲染纹理,然后你在context2中立即查询纹理内容,但你发布到context1的命令还没有完成。
也许你可以在context1的命令缓冲区放置一个栅栏并等待context2中的完成
参考: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glFenceSync.xhtml