簡體   English   中英

JOGL:javax.media.opengl.GLException:AWT-EventQueue-0:上下文不是當前線程

[英]JOGL: javax.media.opengl.GLException: AWT-EventQueue-0: Context not current on thread

我正在使用JOGL創建游戲,但遇到了一個錯誤,我一生都無法弄清楚。

在游戲中,我使用了兩個GLCanvases(實際上是GLJpanels),一個用於菜單,一個用於實際游戲。 其想法是,當從菜單啟動游戲時,菜單GLCanvas從游戲窗口中刪除,並替換為游戲GLCanvas。 到目前為止,我已經使菜單運行得非常完美,但是每當我嘗試切換到游戲畫布時,都會出現此錯誤:

Catched Exception on thread AWT-EventQueue-0
javax.media.opengl.GLException: AWT-EventQueue-0: Context not current on thread, obj 0x2ab44e2d, ctx 0x0, surf 0x0, inDestruction: false, <53f7c06e, 2e7aa0d3>[count 0, qsz 0, owner <NULL>]

我用來在畫布之間切換的代碼是:

public void start()
{
    canvas.addGLEventListener(this);
    animator.start();
    window.add(canvas);
    canvas.requestFocus();
}
public void stop()
{
    window.remove(canvas);
    animator.stop();
    canvas.removeGLEventListener(this);
}

和開關功能:

public void switchToCanvas(String canvasName)
{
    currentCanvas = canvasName;

    if(canvasName.equals("GameCanvas"))
    {
        menu.stop();
        game.start();
    }
    else
    {
        game.stop();
        menu.start();
    }
}

我做了一些谷歌搜索,然后想到了一個問題: 如何創建自己的openGL上下文並將其綁定到GLCanvas?

但是那里發布的所有解決方案都不適合我。

首先,我寧願使用一個GLCanvas而不是2個GLJPanel實例。 GLJPanel具有更高的內存占用量,僅當無法使用GLWindow或AWT / SWT GLCanvas且重量級和輕型組件混合存在某些問題時才應使用。

其次,您的錯誤消息表示此線程上沒有OpenGL上下文當前。 您應該使用GLAutoDrawable.invoke()將OpenGL任務放入隊列中,或者在需要時使上下文成為當前上下文。 我建議您看一下jogl-demos,看看我們如何在示例中做到這一點。

編輯:包括我在內的JogAmp維護人員可以在官方論壇( http://forum.jogamp.org/ )和IRC上輕松聯系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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