JOGL: javax.media.opengl.GLException: AWT-EventQueue-0: контекст не актуален для потока
Я создаю игру с 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?
Но ни одно из опубликованных там решений не помогло мне.
1 ответ
Сначала я бы предпочел использовать один GLCanvas вместо двух экземпляров GLJPanel. GLJPanel имеет больший объем памяти и должен использоваться только тогда, когда нельзя использовать GLWindow или AWT/SWT GLCanvas, когда есть проблемы со смешиванием тяжелых и легких компонентов.
Во-вторых, ваше сообщение об ошибке означает, что в этом потоке нет контекста OpenGL. Вы должны использовать GLAutoDrawable.invoke() для помещения задач OpenGL в очередь, или вы должны сделать контекст текущим, когда вам это нужно. Я советую вам посмотреть на jogl-demos, чтобы увидеть, как мы это делаем в наших примерах.
Редактировать.: С сопровождающими JogAmp, включая меня, можно легко связаться на официальном форуме ( http://forum.jogamp.org/) и на IRC.