应用程序启动后网格定位错误(仅 window resize 修复此问题)

Wrong mesh locating after application startup (only window resize fix this)

很可能这不是问题,而是 window 创建之前配置的一个特性,但我有以下问题。在我启动我的应用程序后,我的模型立即发生位移和拉伸,但一旦我开始调整 window 的大小,它就会立即卡入到位。 我在 window resize:

上写了以下回调
void framebuffer_size_callback(GLFWwindow *window, int w, int h) {
    glViewport (0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
       glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
          1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
    else
       glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
          1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

GLFW 应用程序启动后:

Window 已略微调整大小:

我对 GLUT 没有类似的问题...

我使用 glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE) 在 Retina 高 DPI 显示器上获得正确的 window 大小,但是调用 glViewport() 我传递了旧的未缩放的宽度和高度。解决方案是使用 glfwGetFramebufferSize() 获取当前帧缓冲区大小,并将这些尺寸传递给 glViewport(),它应该正确渲染。