C ++ OpenGL - Overlay示例

时间:2016-01-16 03:22:09

标签: c++ opengl overlay

我需要尽快处理OpenGL应用程序(迷宫风格)。我目前的问题如下:

  • 我的主窗口上有3个子窗口,它们都工作正常。显然,我应该只使用一个子窗口,左侧子窗口(较小的子窗口)应显示为叠加层。我的实际应用程序有以下窗口显示:

Actual window display

我想这样做:

Desired display

我在互联网上搜索过,到目前为止,我还没有发现这个问题。我能读到关于如何解决这个问题的任何地方吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

您可以将叠加层渲染到纹理,然后在屏幕上的任意位置渲染它。查看gl * FrameBuffer函数。它可能看起来像这样:

// Create a texture to render to
glGenTextures(1, &overlay_tex);
glBindTexture(GL_TEXTURE_2D, overlay_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// NULL means reserve texture memory
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);

glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
// Attach the texture to the framebuffer
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, overlay_tex, 0);

glGenRenderbuffers(1, &depth_rb);
glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb);

glBindFramebuffer(GL_FRAMEBUFFER, fb);

// Render your overlay here

glBindFramebuffer(GL_FRAMEBUFFER, 0);

// Render to the backbuffer again