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