Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JOGL中静态使用GL对象?_Java_Opengl_Static_Jogl - Fatal编程技术网

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

Java 如何在JOGL中静态使用GL对象?,java,opengl,static,jogl,Java,Opengl,Static,Jogl,我正在尝试使用JOGL制作一个简单的游戏引擎。但是我不想使用EventListener类,而是想创建一个类似LWJGL的静态对象。不,我不使用LWJGL,因为我有很多麻烦。 这是我的EventListener: class EventListener implements GLEventListener { public static GL2 gl; @Override public void display(GLAutoDrawable drawable) {

我正在尝试使用JOGL制作一个简单的游戏引擎。但是我不想使用EventListener类,而是想创建一个类似LWJGL的静态对象。不,我不使用LWJGL,因为我有很多麻烦。 这是我的EventListener:

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) {

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

实际上,这是个坏主意。不能将GL实例存储到字段中,因为它容易出错,原因如下:

GL实例可能随时变为无效 您可以在没有OpenGL上下文的线程上访问它 现在的 您可以在OpenGL上下文已设置为当前的线程上访问它,但在发布 上下文 这就是为什么你应该使用GLEventListener。否则,您可以通过调用获取有效的GL实例,但如果没有当前上下文,它将抛出一个GleException。您也可以使用,它允许在正确的时间在正确的线程上运行代码,但GLEventListener更有用,因为您可以在初始化时执行一些代码

顺便说一句,JOGL的具体问题应该在上问,而不是在这里问。StackOverflow对于一般的OpenGL问题来说是一个更好的地方,但大多数JogAmp贡献者从未到过这里。是的,StackOverflow不是万灵药

附言:我建议你阅读,如果你想了解JOGL的设计选择,特别是实例设计