ImGui 示例代码/基本初始化不起作用(Windows 和 Linux)

Posted

技术标签:

【中文标题】ImGui 示例代码/基本初始化不起作用(Windows 和 Linux)【英文标题】:ImGui sample code/basic initialisation not working (Windows and Linux) 【发布时间】:2020-12-27 23:34:45 【问题描述】:

我正在尝试设置 ImGui 来制作一些应用程序,但是我无法让它工作。我从 GitHub https://github.com/ocornut/imgui 安装了 .h.cpp 文件,并按照说明允许项目编译,它确实如此。但是在 Windows 和 Linux 上(我都试过了),它会吐出一个运行时错误,(停止响应 Windows,分段错误(核心转储)Linux)。这是已经发布的示例代码,

#include "imgui.h"

int main()



    // Create a window called "My First Tool", with a menu bar.
    ImGui::Begin("My First Tool", &my_tool_active, ImGuiWindowFlags_MenuBar);
    if (ImGui::BeginMenuBar())
    
        if (ImGui::BeginMenu("File"))
        
            if (ImGui::MenuItem("Open..", "Ctrl+O"))  /* Do stuff */ 
            if (ImGui::MenuItem("Save", "Ctrl+S"))    /* Do stuff */ 
            if (ImGui::MenuItem("Close", "Ctrl+W"))   my_tool_active = false; 
            ImGui::EndMenu();
        
        ImGui::EndMenuBar();
    

    // Edit a color (stored as ~4 floats)
    ImGui::ColorEdit4("Color", my_color);

    // Plot some values
    const float my_values[] =  0.2f, 0.1f, 1.0f, 0.5f, 0.9f, 2.2f ;
    ImGui::PlotLines("Frame Times", my_values, IM_ARRAYSIZE(my_values));

    // Display contents in a scrolling region
    ImGui::TextColored(ImVec4(1,1,0,1), "Important Stuff");
    ImGui::BeginChild("Scrolling");
    for (int n = 0; n < 50; n++)
        ImGui::Text("%04d: Some text", n);
    ImGui::EndChild();
    ImGui::End();



    return 0;

现在由于my_tool_activemy_color,这段代码无法编译,所以我在ImGui::Begin()之前的代码中添加了这两行:

bool my_tool_active = true;
float my_color[4] = 0.5, 0.5, 0.5, 1;

所以现在当我编译和运行时,它会到达ImGui::Begin(),然后在那个阶段崩溃。我在一个小得多的例子中尝试过它,它只是 ImGui::Begin()ImGui::End() 并在其周围放置了打印语句,它表明它从未完成执行 Begin()

【问题讨论】:

我的建议是使用调试器并找出代码崩溃的原因。 有什么好的吗?我以前从未使用过,而且我还没有编写 GUI 本身的代码。 @GgsgnHdjwngnf 你从哪里得到的示例代码? examples 有一些库初始化,您的代码中似乎缺少这些初始化。 好像是README.md文件中的代码。 在 Windows 上,我建议使用 Visual Studio Community 2019 作为 IDE 和调试器。我指的是 Visual Studio 社区,而不是具有相似名称但对初学者不太友好的 Visual Studio Code。 【参考方案1】:

Imgui 不提供图形后端,也不创建窗口或图形 API 上下文。您必须自己提供(使用 OpenGL/DirectX/Vulkan ecc...)或使用为您创建的库(SDL/glfw ecc...)。

请参阅示例目录以获得更完整的示例。

这个使用的是sdl+openGl。 https://github.com/ocornut/imgui/blob/master/examples/example_sdl_opengl3/main.cpp

【讨论】:

哦,好吧,这就是我当时感到困惑的原因,谢谢。如果它不提供,那么它实际上做了什么哈哈? 像openGL这样的图形库只渲染三角形和线条。 ImGui 使用图形库来绘制用户界面。

以上是关于ImGui 示例代码/基本初始化不起作用(Windows 和 Linux)的主要内容,如果未能解决你的问题,请参考以下文章

我的渲染技术进阶之旅关于C++轻量级界面开发框架Dear ImGui介绍

我的渲染技术进阶之旅关于C++轻量级界面开发框架Dear ImGui介绍

我的渲染技术进阶之旅关于C++轻量级界面开发框架Dear ImGui介绍

Select2 基本示例不起作用

基本 Angular 材质布局/flex 示例不起作用

单击按钮后,ImGui 冻结