gpt4 book ai didi

java - JOGL:javax.media.opengl.GLException:AWT-EventQueue-0:线程上的上下文不是当前的

转载 作者:行者123 更新时间:2023-12-01 13:30:14 27 4
gpt4 key购买 nike

我正在使用 JOGL 创建游戏,但遇到了一个我一生都无法弄清楚的错误。

在游戏中我使用了两个 GLCanvas(实际上是 GLJpanels),一个用于菜单,一个用于实际游戏。这个想法是,当从菜单启动游戏时,菜单 GLCanvas 将从游戏窗口中删除并交换为游戏 GLCanvas。到目前为止,我已经让菜单工作得非常完美,但每当我尝试切换到游戏 Canvas 时,我都会收到此错误:

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>]

我用来在 Canvas 之间切换的代码是:

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();
}
}

我做了一些谷歌搜索,发现了这个问题:How can I create my own openGL context and bind it to a GLCanvas?

但是那里发布的解决方案都不适合我。

最佳答案

首先,我宁愿使用单个 GLCanvas 而不是 2 个 GLJPanel 实例。 GLJPanel 具有较高的内存占用,仅当无法使用 GLWindow 或 AWT/SWT GLCanvas 以及混合重量级和轻量级组件存在一些问题时才应使用。

其次,您的错误消息意味着该线程上当前没有 OpenGL 上下文。您应该使用 GLAutoDrawable.invoke() 将 OpenGL 任务放入队列中,或者您应该在需要时将上下文设置为当前上下文。我建议您查看 jogl-demos 来了解我们如何在示例中做到这一点。

编辑:包括我在内的 JogAmp 维护者可以在官方论坛 (http://forum.jogamp.org/) 和 IRC 上轻松联系。

关于java - JOGL:javax.media.opengl.GLException:AWT-EventQueue-0:线程上的上下文不是当前的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21610901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com