Ответ 1
Получение большего фреймбуфера
Попробуйте получить большой начальный буфер-буфер, вызвав 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).
Поддержка большого DPI
В документации GLFW говорится:
GLFW теперь поддерживает мониторы с высоким разрешением DPI как на Windows, так и на OS X, что дает окна с полным разрешением фреймбуферов, где другие элементы пользовательского интерфейса масштабируется до. Чтобы достичь этого, glfwGetFramebufferSize() и glfwSetFramebufferSizeCallback(). Эти работы пикселей, тогда как остальная часть GLFW API работает с координатами экрана.
AFAIK, похоже, почти все о высоком DPI в документации.
Просматривая код, мы видим, что в Windows glfw перехватывает в SetProcessDPIAware()
и вызывает его во время platformInit. В настоящее время я не могу найти какой-либо аналогичный код для поддержки высокого DPI на Mac.