OpenGL 未创建具有所需大小的 window

OpenGL doesn't create window with the desired size

所以我有这个代码

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

但是,当我创建一个坐标为(-1, -1)、(0, 1)、(1,-1)的三角形时,它只在角上画了一个小三角形。如果我调整 window 的大小,它会绘制正确的三角形。

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

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

我试着稍微调整 window 的大小,结果 window 的大小大于 1024 x 768。

那么,为什么 glfwCreateWindow 函数不创建大小为 1024 x 768 的 window?还是我理解有误?

我正在使用 macOS High Sierra。

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

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

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

glViewport(0, 0, 1024, 768);

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