首先,要了解实际的问题:当调用线程中当前存在OpenGL上下文时,才可以发出OpenGL调用。OpenGL使用线程本地存储来跟踪任何线程的当前上下文。您创建的LWJGL
2
Display的OpenGL上下文将在名为Display.create()的线程中处于当前状态,该线程可能在主线程调用的未公开DisplayManager类中的某个位置。另一方面,AWT(和Swing处于这种程度)使用单独的专用线程来处理窗口消息事件,例如单击按钮,并将使用该线程调用事件回调。并且LWJGL
Display的OpenGL上下文在该AWT事件线程中不是当前的。
我的建议:创建一个渲染命令队列(可能是java.lang.Runnable的实例),该队列将被轮询,并且所包含的渲染命令由当前LWJGL Display
OpenGL上下文的线程处理,并让您的AWT回调将渲染命令发送到那个队列。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)