使用glfw,opengl时ImGui的问题
Posted
技术标签:
【中文标题】使用glfw,opengl时ImGui的问题【英文标题】:problem with ImGui when using glfw, opengl 【发布时间】:2021-05-01 11:49:20 【问题描述】:我正在尝试将它添加到 glfw 窗口中,但它给了我这个错误
这是删除错误的那一行
ImGui_ImplOpenGL3_Init(GL_renderer);
这是我的 imgui 文件夹
这是main.cpp(除了imgui文件夹外没有其他文件)
#include "imgui/imgui.h"
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "imgui/imgui_impl_glfw.h"
#include "imgui/imgui_impl_opengl3.h"
#include <stdio.h>
int main()
GLFWwindow* window;
if (!glfwInit())
return -1;
window = glfwCreateWindow(850, 500, "test window", NULL, NULL);
// Setup Dear ImGui context
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
// Setup Dear ImGui style
ImGui::StyleColorsDark();
//ImGui::StyleColorsClassic();
// Setup Platform/Renderer backends
ImGui_ImplGlfw_InitForOpenGL(window, true);
char* GL_renderer = (char*)glGetString(GL_RENDERER);
ImGui_ImplOpenGL3_Init(GL_renderer);
if (!window)
return -1;
glfwTerminate();
while (!glfwWindowShouldClose(window))
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplGlfw_NewFrame();
ImGui::NewFrame();
ImGui::Begin("hello world window");
glfwPollEvents();
glfwTerminate();
请帮忙,我已经尝试修复此错误 6 小时了
【问题讨论】:
【参考方案1】:它给了我一个空指针错误,我猜是因为它是错误的变量类型或其他东西。
无论如何,在 glfw opengl 3 的示例文件中,在主函数的开头使用了这样的方法,在该函数中初始化窗口以获取 opengl 渲染版本,也就是导致错误的函数的参数
// Decide GL+GLSL versions
#if defined(IMGUI_IMPL_OPENGL_ES2)
// GL ES 2.0 + GLSL 100
const char* glsl_version = "#version 100";
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
#elif defined(__APPLE__)
// GL 3.2 + GLSL 150
const char* glsl_version = "#version 150";
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 3.2+ only
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // Required on Mac
#else
// GL 3.0 + GLSL 130
const char* glsl_version = "#version 130";
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
//glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 3.2+ only
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // 3.0+ only
#endif
【讨论】:
【参考方案2】:最后应该有一个ImGui::End()
,就像在每个提供的示例中一样。
ImGui::Begin("hello world window");
...
ImGui::End();
编辑您是否也编译了实现文件? https://github.com/ocornut/imgui/blob/master/imgui_draw.cpp
【讨论】:
以上是关于使用glfw,opengl时ImGui的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 gcc 11.2 在 linux 上编译 imgui、glfw、opengl 失败
带有glfw的opengl没有与imgui c ++链接[重复]