Java 如何在JOGL中静态使用GL对象?
我正在尝试使用JOGL制作一个简单的游戏引擎。但是我不想使用EventListener类,而是想创建一个类似LWJGL的静态对象。不,我不使用LWJGL,因为我有很多麻烦。 这是我的EventListener: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) {
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的设计选择,特别是实例设计