我目前正在开发一个 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 不支持创建无头上下文
glfwWindowHint(GLFW_WINDOW_VISIBLE, GLFW_FALSE);
然后当/如果您确实想显示窗口时,请调用
glfwShowWindow()
glfwShowWindow(window);
这当然不是真正的无头上下文,但同样,GLFW 不支持这些,因此这是您可以执行的解决方法。否则,您需要使用另一个支持正确离屏渲染的库。