我正在考虑在我的应用程序中使用 glfw,同时在 mac 上开发
在成功编写了一个非常简单的程序以在彩色背景上渲染三角形后,我注意到在调整窗口大小时,重新渲染场景需要相当长的时间,我怀疑是由于帧缓冲区调整大小。
当我用 NSOpenGLView 重复实验时,情况并非如此。有没有办法提示 glfw 在开始时使用更大的帧缓冲区大小,以避免昂贵的调整大小?
我正在使用 GLFW 3。
您能否帮助我为视网膜显示启用高 DPI。在文档中找不到相关内容,但在版本 3 中支持。
尝试通过调用&glfwCreateWindow()
的较大值来获得较大的初始帧缓冲区,并立即切换到使用所需的实际初始窗口大小来显示较小的窗口。width
height
glfwSetWindowSize()
或者,使用注册您自己的帧缓冲区大小回调函数, 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)线程的单独线程中运行渲染管道。
GLFW 文档说:
GLFW 现在支持 Windows 和 OS X 上的高 DPI 显示器,为 Windows 提供全分辨率帧缓冲区,其中其他 UI 元素被放大。为此,添加了glfwGetFramebufferSize()和 glfwSetFramebufferSizeCallback()。这些处理像素,而 GLFW API 的其余部分处理屏幕坐标。
AFAIK,这似乎是文档中关于高 DPI 的几乎所有内容。
通过代码我们可以看到在 Windows 上,glfw 挂钩SetProcessDPIAware()
并在platformInit 期间调用它。目前我无法在 mac 上找到任何类似的高 DPI 支持代码。