13

我正在考虑在我的应用程序中使用 glfw,同时在 mac 上开发

在成功编写了一个非常简单的程序以在彩色背景上渲染三角形后,我注意到在调整窗口大小时,重新渲染场景需要相当长的时间,我怀疑是由于帧缓冲区调整大小。

当我用 NSOpenGLView 重复实验时,情况并非如此。有没有办法提示 glfw 在开始时使用更大的帧缓冲区大小,以避免昂贵的调整大小?

我正在使用 GLFW 3。

您能否帮助我为视网膜显示启用高 DPI。在文档中找不到相关内容,但在版本 3 中支持。

4

1 回答 1

11

获得更大的帧缓冲区

尝试通过调用&glfwCreateWindow()的较大值来获得较大的初始帧缓冲区,并立即切换到使用所需的实际初始窗口大小来显示较小的窗口。widthheightglfwSetWindowSize()

或者,使用注册您自己的帧缓冲区大小回调函数, glfwSetFramebufferSizeCallback()并根据您的要求将帧缓冲区设置为大尺寸,如下所示:

void custom_fbsize_callback(GLFWwindow* window, int width, int height)
{
    /* use system width,height */
    /* glViewport(0, 0, width, height); */

    /* use custom width,height */
    glViewport(0, 0, <CUSTOM_WIDTH>, <CUSTOM_HEIGHT>);
}

更新在窗口重新调整大小(和窗口拖动)操作期间看到
的渲染管道停止是由于窗口管理器中实现的阻塞行为。

为了在自己的应用程序中缓解这种情况,需要为窗口消息安装处理函数,并在独立于主应用程序(GUI)线程的单独线程中运行渲染管道。


高 DPI 支持

GLFW 文档说:

GLFW 现在支持 Windows 和 OS X 上的高 DPI 显示器,为 Windows 提供全分辨率帧缓冲区,其中其他 UI 元素被放大。为此,添加了glfwGetFramebufferSize()glfwSetFramebufferSizeCallback()。这些处理像素,而 GLFW API 的其余部分处理屏幕坐标。

AFAIK,这似乎是文档中关于高 DPI 的几乎所有内容。

通过代码我们可以看到在 Windows 上,glfw 挂钩SetProcessDPIAware()并在platformInit 期间调用它。目前我无法在 mac 上找到任何类似的高 DPI 支持代码。

于 2013-07-25T11:00:51.597 回答