问题标签 [imgui]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5942 浏览

c++ - GLFW & ImGui:从主线程以外的线程创建 ImGui 控件

我将 GLFW 和 ImGui 用于涉及打开多个窗口的项目。到目前为止,我已经进行了设置,因此每次必须打开一个新窗口时,我都会生成一个线程来创建它自己的 GLFW 窗口和 OpenGL 上下文。线程函数看起来像这样:

我知道 GLFW 要求您从主线程(调用的那个glfwInit())轮询事件,所以我的主线程上有一个循环来执行此操作:

所以我遇到的问题是我的 ImGui 控件不响应任何类型的输入,并且glfwWindowShouldClose()如果我单击关闭按钮,则永远不会返回 true。似乎输入状态仅在调用的线程上可用glfwPollEvents(),这让我相信你不能在仍然使用单独的线程进行渲染的同时结合 ImGui 和 GLFW!

如何解决此问题以允许 ImGui 和这些窗口响应 GLFW 事件?

我之前的尝试使用单个线程来迭代每个窗口并更新/渲染它,但我希望使用线程来帮助应用程序在打开许多窗口时更好地扩展。

更新:我想澄清一下,这个应用程序涉及实时处理复杂的机器视觉,并且 ImGui 代码部分与控制和响应这个机器视觉代码高度集成。因此,我希望能够在与此处理相同的线程上调用 ImGui 函数,这也意味着该线程必须能够响应 glfw 输入。

0 投票
1 回答
1035 浏览

c++ - OpenGL 纹理导致 ImGUI 窗口永久失焦

我正在关注 TheCherno 的关于 OpenGL 的教程(不过我已经进行了一些修改)。我在 MacOS mojave 上并且有 OpenGL 2.1。然而,当我进入教程的 ImGui 部分时,事情开始变得很奇怪。

由于我有旧版本的 OpenGL,我使用的是 ImGui 的 glfw_opengl2_impl,并且https://github.com/ocornut/imgui/blob/master/examples/example_glfw_opengl2/main.cpp上的示例代码有效,但我除了 .h 文件(见我的代码顶部)之外,还必须包含一些其他 cpp 文件。

当我用自己的代码尝试这个时,我发现我必须在调用之前取消绑定着色器、顶点缓冲区/索引缓冲区和顶点数组ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());这实际上按预期工作了一次,但是在关闭并重新启动程序时,窗口拒绝了聚焦,文本显示为矩形。像 这样

我的代码:

编辑:我刚刚发现完全删除所有纹理可以解决问题。在绘制之前取消绑定纹理什么都不做。

编辑 2:显然有多个纹理是问题?!有一个纹理很好,但有多个会导致这个问题。同样,解除绑定什么也不做。

0 投票
2 回答
7395 浏览

c++ - 如何在 ImGui Columns 中右对齐文本?

假设我创建了一个包含以下内容的表:

如何使第二行(1、2 和 3)中的文本在列中右对齐?我见过CalcItemWidthand CalcTextSize,但我无法弄清楚它们如何在多列行中工作。

0 投票
1 回答
3097 浏览

c++ - OpenGL imgui 滑块范围

我有一个使用 OpenGL 创建的 960x540 窗口。在这里渲染一个纹理并使用imgui实现一个滑块,让我在运行时平移 x、y 和 z 位置。

首先,我设置滑块默认值。

稍后在我的循环中,只要窗口打开,逐帧渲染对象位置,我将ImGui::SliderFloat3 v_minv_max参数设置为窗口的尺寸。看起来所有 3 个滑块 x、y 和 z 都使用这些值,但是有没有办法为每个滑块设置一个范围?如您所见,我的 y 轴滑块可以超过 540。

在此处输入图像描述

0 投票
0 回答
197 浏览

c++ - 如何在 C++ 中获取文件的路径?

我正在用 ImGUI 制作一个应用程序来选择图片。所以我需要调用“OPENFILENAME”来调用一个对话窗口,并且有我的代码可以做到这一点:

但是后来我需要有一个image的路径,我在chartype中选择了它,并且lpstrFile是一个THCARtype。我找到了任何可以做成的THCAR东西char。我是否以正确的方式选择文件,如果是,我怎样才能以通常的 char 格式获取文件路径?

0 投票
1 回答
1754 浏览

python - PyImgui 图形用户界面不可见

所以我刚开始在 python 中编写 GUI,在 tkinter 中编写了一些东西之后,我觉得我还不如使用 imgui,因为我从 C++ 中了解了一些关于它的东西。

现在开始阅读文档,不知何故 imgui 窗口没有出现。我只看到一个控制台弹出一毫秒但没有 gui。

我觉得我没有选择任何引擎来渲染,但我不确定。

0 投票
1 回答
78 浏览

c++ - 为什么最后一个推回对象的字段到向量中会转移到向量的其他对象?

我的代码有点卡住了,我无法找出问题所在。我希望你能帮助我。

我有 4 个类: - 类 BasicModul:除其他外,它有一个名为 modulName 的字段。- 类 DrawingSettings:此时不相关 - 类 ModulRepresentation:由 BasicModul 对象和 DrawingSettings 对象构成。- 类 ModulesContainer:它有一个字段是 std::vector 。它在代码中使用的对象是“容器”。

我的问题是,显然当将新的 ModulRepresentation 推回 ModulesContainer (ModulRepresentation 的向量)时,似乎最后创建并推回的 ModulRepresentation 的字段被传递到先前创建并推回 ModulContainer 中的 ModulRepresentation 的字段中. ModulContainer“容器”在代码的开头被初始化。我正在使用 ImGui 创建 GUI。

错误在哪里?我以前有一个更简单的代码,它的功能基本相同,但封装较少(例如,std::vector 直接在主代码中定义等等)并且它按预期工作。modulCounter 变量从值 0 开始。我认为类函数的名称应该足够具有描述性,但如果您需要更多信息,请告诉我。

提前致谢!

这是输出:

0 投票
1 回答
755 浏览

c++ - DirectX 11 D3D11_BLEND_DESC

在将 directX11 中的文本渲染到其他对象上时,我得到了一些奇怪的结果。每个字符都变成黑色背景(我的清除颜色)。如果文本直接呈现到背景,一切都很好。我使用 imgui lib 进行渲染。我认为这是由错误的混合设置引起的 - 这些是我的设置:

这是显示问题的图像:

这是显示问题的图像

更新#1:

这是我用来绘制字符串的方法:https ://github.com/ocornut/imgui/blob/9cff4d6e5e76dd18d9c4ee7a1560563da2059a44/imgui_draw.cpp#L2937

我的clearcolor是:

使用 ErnieDingo 的设置,我得到了这个结果: 积极的部分:每个角色周围的框都消失了。不好的部分:文本非常模糊/不清晰,特别是如果文本在深色背景/无背景上呈现。

更新#2:这张图片似乎简明扼要地显示了这个问题:在此处输入图像描述正方形的重叠部分应该是黄色的,而不是像顶部那样的绿色。第一个图像还显示,仅考虑了字体的透明背景,这导致了每个字母后面的奇怪条。

0 投票
1 回答
110 浏览

graphics - 双击窗口的标题栏和单击窗口的最大化按钮有什么区别吗?

我在使用 imgui dx12 示例时发现了一个非常奇怪的错误。当我双击窗口的标题栏以最大化窗口时,程序无法重新创建命令分配器。但是单击窗口的最大化按钮或调整窗口大小是可以的。显卡驱动可能会导致这个问题,因为它只在我使用集成英特尔显卡运行程序时才会发生。

0 投票
1 回答
511 浏览

vulkan - 如何在 Vulkan 中将 ImGui 帧与场景渲染“混合”

我不是 Vulkan 方面的专家。我想知道如何在常规场景渲染的顶部呈现 Vulkan 帧(提交每帧记录的特定命令缓冲区以绘制 UI 更改)。所以在这种情况下,我有两个渲染通道,一个用于场景,另一个用于 ImGui,还有两个命令缓冲区。在尝试发送这两个 commandBuffers 时,只显示最后一个,因为它们使用的是交换链图像。我错过了什么?imgui pass 中的 frameBuffer 视图附件应该是 swapchainImage 吗?