簡體   English   中英

改善窗口大小調整行為,可能通過手動設置更大的幀緩沖區大小

[英]Improving window resize behaviour, possibly by manually setting bigger framebuffer size

我正在考慮在我的應用程序中使用glfw,同時在mac上進行開發

在成功編寫一個非常簡單的程序以在彩色背景上渲染三角形之后,我注意到在調整窗口大小時,重新渲染場景需要相當長的時間,因為我懷疑是由於幀緩沖區調整大小。

當我用NSOpenGLView重復實驗時,情況並非如此。 有沒有辦法暗示glfw在啟動時使用更大的幀緩沖區大小,以避免昂貴的調整大小?

我正在使用GLFW 3。

你能幫助我為視網膜顯示啟用高DPI嗎? 無法在文檔中找到某些內容,但在版本3中支持。

獲得更大的幀緩沖區

嘗試通過調用widthheight值較大的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)線程的單獨線程中運行渲染管道。


高DPI支持

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM