gpt4 book ai didi

opengl - 仅使用 EGLSurface 在多个表面上绘图?

转载 作者:行者123 更新时间:2023-12-02 21:17:02 27 4
gpt4 key购买 nike

是否可以仅使用 eglCreateWindowSurface 返回的处理程序,在多个表面上从同一个应用程序逐个绘制?

我想要实现的是创建两个或多个表面并将它们传递给将在其上绘制的客户端,然后,完成后,基本上,我只需要执行 swapBuffers。一个简单的表面处理程序 (EGLSurface) 就足以让客户端绘制形状等了吗?

我找不到任何例子;每个示例都只是在当前上下文中绘制。

最佳答案

我会通过创建一个由纹理支持的 openGL 帧缓冲区来解决这个问题。我会为此画一次复杂的图画。然后我会使用纹理 ID 在每个 EGLSurface 上绘制一个四边形。

类似于:

eglMakeCurrent();

// generate na FB
glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, mContextParams->mTexture);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, Texture, 0);

然后将花哨的东西绘制到帧缓冲区:

eglMakeCurrent();

glBindFramebuffer(GL_FRAMEBUFFER, fb);

// do draw here

// unbind
glBindFramebuffer(GL_FRAMEBUFFER, 0);

然后绘制到屏幕:

for (everyEGLContext)
{
eglMakeCurrent(display, surface, surface, context);
drawQuad(texture);
eqlSwapBuffers(display, surface);
}

关于opengl - 仅使用 EGLSurface 在多个表面上绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30061753/

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