ImGui,使用 SDL2 Renderer,三个独立的 NewFrame 函数有什么意义?

ImGui, with SDL2 Renderer, what is the point of the three separate NewFrame functions?

提问人:Сергей Макеев 提问时间:11/6/2023 最后编辑:genpfaultСергей Макеев 更新时间:11/6/2023 访问量:77

问:

我正在尝试使用 SDL2 后端和软件渲染器设置 ImGui。在提供的示例 () 中,在每个渲染周期开始时都有以下三个调用:./examples/example_sdl2_sdlrenderer2/main.cpp

        // Start the Dear ImGui frame
        ImGui_ImplSDLRenderer2_NewFrame();
        ImGui_ImplSDL2_NewFrame();
        ImGui::NewFrame();

如果我注释掉这些调用中的任何一个,程序就会崩溃。如果我重新订购它们,它会在某些订单上崩溃,而对于其他订单则工作正常。那么,为什么这三个电话是分开的呢?它们之间有什么区别,为什么我需要这三者?

我希望至少有一些关于这个问题的文档(特别是关于我应该按什么顺序调用它们的主题,这取决于哪个等等),但没有任何关于它们的内容。有 的通用文档页面,但好像其他两个根本不存在。ImGui::NewFrame()

其他问题: 在有些情况下,只使用其中的一两个是有意义的吗? 至少有时,它们的一个顺序是否比另一个顺序更可取?

C++ SDL-2 IMGUI

评论


答:

1赞 HolyBlackCat 11/6/2023 #1

ImGui 及其后端是模块化的。 无论使用的后端如何,都会被调用。ImGui::NewFrame();

ImGui_ImplSDL2_NewFrame();用于 SDL2 后端,但 SDL2 支持多种不同的渲染方法(OpenGL、Vulkan、内置渲染器)。

ImGui_ImplSDLRenderer2_NewFrame();用于 SDL2 的内置渲染器。

评论

0赞 Сергей Макеев 11/6/2023
我几乎从头文件的结构中得到了这一点。尽管如此,问题仍然存在:我是否可以(并且应该)手动调用这三个?还有我打电话给他们的订单,等等。在时间范围内超早地称呼其中一个,而在时间范围内称另外两个,是否有意义?
0赞 HolyBlackCat 11/6/2023
@СергейМакеев“原因......手动调用所有三个“ 为什么每次将 a 传递给 ImGui 时都必须写入,或者为什么 ImGui 没有在他们的 widget 上提供 RAII 包装器的原因相同:开发人员认为手动方式是最好的方式,无论好坏。“命令我把他们叫进来”如果示例没有显示其他情况,我不会弄乱顺序。.c_str()std::string
0赞 Сергей Макеев 11/6/2023
这是否意味着,如果我围绕这个系统编写自己的包装器,我可以将这三个组合成一个函数而忘记它?我怎么能确定我永远不需要它们?
0赞 HolyBlackCat 11/6/2023
@СергейМакеев我会把它们结合起来。如果示例没有单独调用它们,那么您可能也不需要。