OpenGL不会创建具有所需大小的窗口

时间:2018-03-25 03:36:46

标签: c++ opengl glfw

所以我有这个代码

GLFWwindow* window = glfwCreateWindow(1024, 768, "Hello Triangle", NULL, NULL);
glViewport(0, 0, 1024, 768);

但是,当我创建一个带坐标(-1,-1),(0,1)和(1,-1)的三角形时,它只在角落处画了一个小三角形。如果我调整窗口大小,它会绘制正确的三角形。

所以,我设置了帧缓冲区大小回调:

void FramebufferSizeCallback(GLFWwindow* window, int width, int height) {
    glViewport(0, 0, width, height);
    cout << width << " " << height << endl;
}

我尝试稍微调整窗口大小,结果窗口大小超过1024 x 768.

那么,为什么glfwCreateWindow函数不能创建一个大小为1024 x 768的窗口?或者我的理解是错误的?

我正在使用macOS High Sierra。

1 个答案:

答案 0 :(得分:2)

glViewport的第一次调用不起作用,因为此时没有当前的OpenGL上下文。调用glfwMakeContextCurrent使窗口的上下文成为当前的 任何OpenGL指令:

GLFWwindow* window = glfwCreateWindow(1024, 768, "Hello Triangle", NULL, NULL);

glfwMakeContextCurrent(wnd); // <-- make the context current before glViewport

glViewport(0, 0, 1024, 768);

注意,glfwCreateWindow创建一个窗口和一个关联的OpenGL上下文,但它不会更改当前的上下文。