如何在 GLFW 之前初始化 OpenGL?

问题描述 投票:0回答:1

我目前正在开发一个 OpenGL 图形引擎,重点是多功能性。我的目标是它在窗口中显示框架,并且还可以将图像保存到磁盘而不显示窗口。为了实现这一目标,我决定在 GLFW(OpenGL 框架)之前初始化 OpenGL。过去,我在使用 gladLoadGLLoader() 函数创建窗口后初始化 OpenGL。不过,由于现在需要使用gladLoadGL()函数,所以在C中实现时遇到了SIGSEV错误。

  ASSERT(!gladLoadGL(), "Failed to load OpenGL!\n");
  glViewport(0, 0, 256, 256);

  struct window wd;
  /*
   * this is the struct:
   *
   * struct window {
   *   int width, height;
   *   const char *title;
   *   GLFWwindow *id;
   * };
   * */


  ASSERT(!glfwInit(), "Failed to initialize GLFW!\n");

  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

#ifdef __APPLE__
  glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
#endif

  wd.id = glfwCreateWindow(256, 256, title, NULL, NULL);
  ASSERT(wd.id == NULL, "Failed to create window!\n");
  glfwMakeContextCurrent(wd.id);
以下代码抛出 SIGSEV。但是当我在 GLFW 之后用 

gladLoadGLLoader()
 初始化 GLAD 时,它工作得很好。

GLFW 不支持创建无头上下文
c opengl glfw glad
1个回答
1
投票

glfwWindowHint(GLFW_WINDOW_VISIBLE, GLFW_FALSE); 然后当/如果您确实想显示窗口时,请调用

glfwShowWindow()

:

glfwShowWindow(window);
这当然不是真正的无头上下文,但同样,GLFW 不支持这些,因此这是您可以执行的解决方法。否则,您需要使用另一个支持正确离屏渲染的库。

© www.soinside.com 2019 - 2024. All rights reserved.