将视口渲染到纹理会产生重叠视口?
Rendering viewport to texture produces overlaps viewports?
我正在创建一个 2D 引擎,我想实现对接,所以我需要创建一个视口并将屏幕渲染为纹理。
为了渲染视口,我将帧缓冲区保存到 FrameBufferObject 中并像往常一样进行绘图,我以前使用过这种技术并且没有问题,这里是绘图代码:
glBindFramebuffer(GL_FRAMEBUFFER, fbo_msaa_id);
glViewport(0, 0, width, height);
DrawRoomObjects();
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_msaa_id);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_id);
glBlitFramebuffer(0, 0, width, height, // src rect
0, 0, width, height, // dst rect
GL_COLOR_BUFFER_BIT, // buffer mask
GL_LINEAR); // scale filter
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, App->moduleWindow->screen_surface->w, App->moduleWindow->screen_surface->h);
我已经确保 DrawRoomsObjects()
功能正常工作,并且 FBO 已正确初始化。
这是渲染使用 ImGui 库创建的纹理的代码:
glEnable(GL_TEXTURE_2D);
if (ImGui::Begin("Game Viewport", &visible, ImGuiWindowFlags_MenuBar)) {
ImGui::Image(viewportTexture->GetTextureID());
}
在此块之前,我进行了一些计算以使图像适合停靠栏,我不再在代码中使用 viewportTexture
。
当我在移动四边形时得到这个奇怪的工件时,问题就来了,我不知道如何调用,点击this link查看错误的gif。
纹理似乎没有正确清理数据...?
在将对象渲染到帧缓冲区之前,您必须清除帧缓冲区:
glBindFramebuffer(GL_FRAMEBUFFER, fbo_msaa_id);
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
DrawRoomObjects();
我正在创建一个 2D 引擎,我想实现对接,所以我需要创建一个视口并将屏幕渲染为纹理。
为了渲染视口,我将帧缓冲区保存到 FrameBufferObject 中并像往常一样进行绘图,我以前使用过这种技术并且没有问题,这里是绘图代码:
glBindFramebuffer(GL_FRAMEBUFFER, fbo_msaa_id);
glViewport(0, 0, width, height);
DrawRoomObjects();
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_msaa_id);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_id);
glBlitFramebuffer(0, 0, width, height, // src rect
0, 0, width, height, // dst rect
GL_COLOR_BUFFER_BIT, // buffer mask
GL_LINEAR); // scale filter
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, App->moduleWindow->screen_surface->w, App->moduleWindow->screen_surface->h);
我已经确保 DrawRoomsObjects()
功能正常工作,并且 FBO 已正确初始化。
这是渲染使用 ImGui 库创建的纹理的代码:
glEnable(GL_TEXTURE_2D);
if (ImGui::Begin("Game Viewport", &visible, ImGuiWindowFlags_MenuBar)) {
ImGui::Image(viewportTexture->GetTextureID());
}
在此块之前,我进行了一些计算以使图像适合停靠栏,我不再在代码中使用 viewportTexture
。
当我在移动四边形时得到这个奇怪的工件时,问题就来了,我不知道如何调用,点击this link查看错误的gif。
纹理似乎没有正确清理数据...?
在将对象渲染到帧缓冲区之前,您必须清除帧缓冲区:
glBindFramebuffer(GL_FRAMEBUFFER, fbo_msaa_id);
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
DrawRoomObjects();