ImGui 多重采样

ImGui multisampling

我使用多重采样将我的场景渲染到 FBO。我将生成的纹理用作 ImGui::Image 内容。但是如何禁用 gui 的多重采样? 我试过了:

glDisable(GL_MULTISAMPLE);
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplSDL2_NewFrame(Game::getWindow());
ImGui::NewFrame();
//...
// Some gui elements
//...
ImGui::Render();
ImGui::UpdatePlatformWindows();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
glEnable(GL_MULTISAMPLE);

但这行不通。 msaa在gui画的时候真的启用了(文字模糊)

当涉及 window 上下文时,您无法在 创建 window 之后禁用 MSAA 。您需要重新创建 window 才能生效。

我不确定 FBO 是否需要同样的东西,但是,据我所知,在运行时调用 glDisable(GL_MULTISAMPLE) 只会清理 some AA 状态,并且你不能依赖它,因为它的目的是你重新创建你的 window 来对 MSAA 进行更改,所以我猜它可能不会像你期望的那样影响你的 FBO。

There's also an open issue on the ImGui repo 关于处理 AA 和字体,虽然现在似乎“搁置”了。