无法创建 GLFW 窗口
Posted
技术标签:
【中文标题】无法创建 GLFW 窗口【英文标题】:Failing to create GLFW window 【发布时间】:2019-11-01 07:18:46 【问题描述】:我想创建一个共享 GLFW 窗口,但 GLFW 无法创建第二个窗口。
我可以创建一个窗口,但不能创建两个窗口
这是我的代码。
我想在另一个线程中使用第二个窗口,以便共享它们的上下文。
#include "pch.h"
#include <iostream>
#include <gl\glew.h>
#include <glfw3.h>
int SCR_WIDTH = 1920;
int SCR_HEIGHT = 1080;
int main()
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// glfw window creation
// --------------------
GLFWwindow* sharedWindow = NULL;
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", 0, sharedWindow);
if (window == NULL)
std::cout << "Failed to create the first GLFW window" << std::endl;
glfwTerminate();
return -1;
if (sharedWindow == NULL)
std::cout << "Failed to create the second GLFW window" << std::endl;
// glfwTerminate();
// return -1;
while (true)
std::cout << "Hello World!\n";
【问题讨论】:
【参考方案1】:share
是一个输入参数。见glfwCreateWindow
。
创建第一个窗口并为第二个窗口第二次调用glfwCreateWindow
:
GLFWwindow* wnd = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", 0, nullptr);
GLFWwindow* wnd2 = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "window 2", 0, window);
窗口甚至可以在单独的线程中创建,但请注意,当您创建第二个窗口时,您必须确保第一个窗口的 OpenGL 上下文不是当前的。
#include <thread>
#include <mutex>
#include <condition_variable>
GLFWwindow *wnd = nullptr;
bool wnd2created = false;
std::mutex mtx;
std::condition_variable cv;
void wnd2func( void )
GLFWwindow *wnd2 = glfwCreateWindow( 800, 600, "window 2", nullptr, wnd );
std::unique_lock<std::mutex> lck(mtx);
wnd2created = true;
cv.notify_one();
if (wnd2 == nullptr)
return;
glfwMakeContextCurrent(wnd2);
// [...]
int main()
// [...]
wnd = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", 0, nullptr);
if (wnd2 == nullptr)
return -1;
std::thread wnd2thread(wnd2func);
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []() -> bool return wnd2created; );
glfwMakeContextCurrent(wnd);
// [...]
【讨论】:
非常感谢您关注您的回答,现在它就像魅力一样发挥作用以上是关于无法创建 GLFW 窗口的主要内容,如果未能解决你的问题,请参考以下文章