2014-05-25 44 views
5

我正在研究GLFW應用程序,並且在調整窗口大小時發現了一個問題。GLFW民意調查等待,直到窗口調整完成,如何解決?

當用戶縮放窗口時,glfwPollEvents()函數會等待,直到用戶完成。這意味着,在縮放窗口期間,不會調用渲染函數,並創建可怕的工件。

我已經通過調用主循環渲染功能以及窗口大小調整回調圍繞這工作:

#include <GLFW/glfw3.h> 

static void render(GLFWwindow* window) { 
    glfwMakeContextCurrent(window); 

    glClear(GL_COLOR_BUFFER_BIT); 

    glfwSwapBuffers(window); 
} 

static void window_size_callback(GLFWwindow* window, int width, int height) { 
    render(window); 
    glViewport(0, 0, width, height); 
} 

int main(void) { 
    if (!glfwInit()) { 
     return -1; 
    } 

    GLFWwindow* window = glfwCreateWindow(640, 480, "Terrain chunk render", NULL, NULL); 
    if (!window) { 
     glfwTerminate(); 
     return -1; 
    } 

    glfwSetWindowSizeCallback(window, window_size_callback); 

    while (!glfwWindowShouldClose(window)) { 
     render(window); 
     glfwPollEvents(); 
    } 

    glfwTerminate(); 
    return 0; 
} 

然而,這意味着渲染功能,當用戶不叫在縮小窗口而不實際移動窗口後按住鼠標按鈕。有沒有一種有效的方法來解決這個問題,並使渲染函數調用更一致?

+0

我不太確定,但是您檢查了Windows系統設置嗎?如果不是,假設Windows 7,你可以嘗試[this](http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/in-windows-7-how-do-i-show- window-contents-while/18e3aee2-bcc7-4005-a45d-c5613cf6eb3c),並看看它是如何發展的。 – Keugyeol

回答

0

您應該將glfwSetWindowSizeCallback(window, window_size_callback);移動到while循環中,以便在重新調整窗口大小時調用渲染函數。我很久以前也有同樣的問題。

編輯:不建議在循環中設置回調。只需在窗口大小調整時重新繪製框架。

+0

這是什麼意思?每幀重置回調?乍一看聽起來不對了 – Grief

+1

感謝您指出了這一點。似乎我並不真正瞭解我當時在做什麼。 – Polar1ty

2

使用兩個線程,一個用於輪詢事件,一個用於渲染。您也可以使用glfwWaitEvents而不是glfwPollEvents來阻止事件線程,直到事件可用。

相關問題