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_active
和my_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介绍