[英]Improving window resize behaviour, possibly by manually setting bigger framebuffer size
我正在考慮在我的應用程序中使用glfw,同時在mac上進行開發
在成功編寫一個非常簡單的程序以在彩色背景上渲染三角形之后,我注意到在調整窗口大小時,重新渲染場景需要相當長的時間,因為我懷疑是由於幀緩沖區調整大小。
當我用NSOpenGLView重復實驗時,情況並非如此。 有沒有辦法暗示glfw在啟動時使用更大的幀緩沖區大小,以避免昂貴的調整大小?
我正在使用GLFW 3。
你能幫助我為視網膜顯示啟用高DPI嗎? 無法在文檔中找到某些內容,但在版本3中支持。
嘗試通過調用width
和height
值較大的glfwCreateWindow()
並立即切換到使用glfwSetWindowSize()
顯示較小的窗口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監視器,提供窗口全分辨率幀緩沖區,其他UI元素按比例放大。 為此,添加了glfwGetFramebufferSize()和glfwSetFramebufferSizeCallback() 。 這些使用像素,而GLFW API的其余部分使用屏幕坐標。
AFAIK,在文檔中似乎幾乎所有關於高DPI的內容。
通過代碼,我們可以看到在Windows上, glfw掛鈎到 SetProcessDPIAware()
並在platformInit期間調用它 。 目前我無法在mac上找到任何類似的高DPI支持代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.