在 Mac OS X 上,Framebuffer 的尺寸与窗口的尺寸并不一样。

GLFW 能察觉到这一点,Qt、GLUT 不能。

因此,如果我们使用 GLFW 来创建窗口:

1
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", nullptr, nullptr);

创建窗口之后,在使用

1
glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT);

来映射屏幕坐标时,会得到错误的结果。我们只能得到四分之一的区域。

系统在创建 framebuffer 时会自动将 framebuffer 的宽和高都变为当前窗口宽高的两倍。

也就是说我们指定窗口大小为 800x600 时,系统会创建一个 1600x1200 的 framebuffer。

正确的做法是:

1
2
3
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);

这样比较跨平台。