我正在创建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。
似乎纹理无法正确清除数据...?