C++ 将视口渲染为纹理会产生重叠视口吗?

C++ 将视口渲染为纹理会产生重叠视口吗?,c++,opengl,framebuffer,render-to-texture,C++,Opengl,Framebuffer,Render To Texture,我正在创建一个2D引擎,我想实现对接,所以我需要创建一个视口并将屏幕渲染为纹理 为了渲染视口,我将帧缓冲区保存到一个帧缓冲区对象中,并像往常一样进行绘图,我在一段时间前使用了这种技术,它工作正常,以下是绘图代码: glBindFramebuffer(GL_FRAMEBUFFER, fbo_msaa_id); glViewport(0, 0, width, height); DrawRoomObjects(); glBindFramebuffer(GL_READ

我正在创建一个2D引擎,我想实现对接,所以我需要创建一个视口并将屏幕渲染为纹理

为了渲染视口,我将帧缓冲区保存到一个帧缓冲区对象中,并像往常一样进行绘图,我在一段时间前使用了这种技术,它工作正常,以下是绘图代码:

    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());
}
在这段代码之前,我进行了一些计算以使图像适合dock,我不再在代码中使用
viewportTexture

问题是,当我在移动四边形时得到这个奇怪的工件时,我不知道如何调用它,单击以查看该bug的gif


似乎纹理没有正确清理数据

在将对象渲染到帧缓冲区之前,必须清除帧缓冲区:

glBindFramebuffer(GL_FRAMEBUFFER,fbo_msaa_id);
glViewport(0,0,宽度,高度);
glClear(GLU颜色缓冲位);
DrawRoomObjects();

显然,这就是问题所在!我用删除了那行,没有注意到。谢谢!!