2011-10-11 75 views
2

我正在開發一個使用LWJGL的遊戲。在移動窗口時(計劃在未來添加調整大小的代碼),渲染循環凍結。我希望它在移動的同時繼續以某種方式運行。 LWJGL不包含glutMainLoop。opengl窗口在移動過程中凍結/調整大小

顯示屬於OpenGL,而不是Java。

相關代碼:

regular = new DisplayMode(800,600); 
    GL11.glClearColor(0.47f,0.55f,1.0f, 0.0f); 
    GL11.glClearDepth(1.0f); 
    try { 
     Display.setDisplayMode(regular); 
     Display.setTitle("Game Name"); 
     Display.setIcon(loadIcon("resources/icon.png")); 
     Display.create(); 
     seedresult= new Random(seed); 
    } catch (LWJGLException e) { 
     e.printStackTrace(); 
    } 
    while (!Display.isCloseRequested()) { 
    Display.sync(60); 
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
    //render objects 
    Display.update();} 
    System.exit(0); 
+0

當然的渲染循環凍結,作爲窗口處理移動事件,所以它不會在同一時間呈現。 –

+0

我非常確定這就是爲什麼,但我想知道如何才能糾正它。 – Sean

回答

2

嘿嘗試創建一個單獨的線程渲染部分(Opengl的init和更新/渲染)。 我的意思是爲您呈現除使用主線程以外的其他線程。

參考,你可以檢查這個維基(最後一個例子) http://lwjgl.org/wiki/index.php?title=Basic_LWJGL_Applet

+0

我這樣做了,並且它不需要很長的時間,因爲我已經將我的主渲染器包含在一個類中,我所要做的只是使其成爲可運行的並在主函數中創建線程,但這並未解決問題。 – Sean

+0

好的,最後的審判...你可以在遊戲線程中放置最少量的睡眠,並讓我知道狀態? – Ayyappa

+0

我在想什麼,通常情況下,事件將被處理 - 你的代碼不會運行,直到事件被服務... – Ayyappa