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 上下文,但它不会更改哪个上下文是当前的。
所以我有这个代码
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 上下文,但它不会更改哪个上下文是当前的。