如何在 JOGL 中静态使用 GL 对象?

我正在尝试使用 JOGL 制作一个简单的游戏引擎。但是我不想使用 EventListener 类,而是像在 LWJGL 中那样创建一个静态对象。不,我不使用 LWJGL,因为我遇到了很多麻烦。这是我的事件监听器:


class EventListener implements GLEventListener {


    public static GL2 gl;


    @Override

    public void display(GLAutoDrawable drawable) {

        gl = drawable.getGL().getGL2();


        gl.glClear(GL.GL_COLOR_BUFFER_BIT);

        gl.glClearColor(0, 1, 0, 1);

    }


    @Override

    public void dispose(GLAutoDrawable drawable) {


    }


    @Override

    public void init(GLAutoDrawable drawable) {


    }


    @Override

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {


    }

}

在主类中,它清除了一个绿屏,因此它可以完美地工作。但是,如果我尝试在其他类中使用“gl”对象,它什么也不做。提前致谢!


哔哔one
浏览 71回答 1
1回答

弑天下

实际上,这是个坏主意。您不能将 GL 实例存储到字段中,因为它很容易出错,原因有以下几个:GL 实例随时可能失效您可以在 OpenGL 上下文不是当前的线程上访问它您可以在 OpenGL 上下文已成为当前线程的线程上访问它,但有时它不是当前的(在释放上下文之后)这就是您应该使用 GLEventListener 的原因。否则,您可以通过调用GLContext.getCurrentGL()获取有效的 GL 实例,但如果没有当前上下文,它会抛出 GLException。您也可以使用GLAutoDrawable.invoke(),它允许在正确的时间在正确的线程上运行您的代码,但 GLEventListener 更有用,因为您可以在初始化时执行一些代码。顺便说一下,JOGL 的具体问题应该在官方 JogAmp 论坛上而不是在这里提问。StackOverflow 是解决一般 OpenGL 问题的好地方,但大多数 JogAmp 贡献者从来没有来过这里。是的,StackOverflow 不是灵丹妙药。PS:如果你想了解JOGL的设计选择,尤其是实例设计,我建议你阅读这篇文章和评论。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java