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

我正在创建2D引擎,并且想要实现停靠,因此我需要创建一个视口并将屏幕渲染为纹理。

要渲染视口,我将帧缓冲区保存到FrameBufferObject中并照常进行绘制,我前一段时间使用了此技术,并且没有问题,这是Draw代码:

    glBindFramebuffer(GL_FRAMEBUFFER,fbo_msaa_id);
    glViewport(0,width,height);

    DrawRoomObjects();

    glBindFramebuffer(GL_READ_FRAMEBUFFER,fbo_msaa_id);
    glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo_id);
    glBlitFramebuffer(0,height,// src rect
        0,// dst rect
        GL_COLOR_BUFFER_BIT,// buffer mask
        GL_LINEAR); // scale filter

    glBindFramebuffer(GL_FRAMEBUFFER,0);
    glViewport(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。

似乎纹理无法正确清除数据...?

leekikong1986 回答:将视口渲染为纹理会产生重叠视口?

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

glBindFramebuffer(GL_FRAMEBUFFER,fbo_msaa_id);
glViewport(0,width,height);

glClear(GL_COLOR_BUFFER_BIT);
DrawRoomObjects();
本文链接:https://www.f2er.com/3156709.html

大家都在问