我正在JOGL与我的项目组合作开发一款3D游戏。我们正在应对性能问题。我们的游戏以每秒20帧或更少的速度运行。
我们测量了主显示功能的执行时间。结果是4毫秒这是好的。但是,当我们测量两次显示调用之间的时间时,结果是60毫秒。
所以问题是。在Opengl的两次显示调用之间会发生什么?
提前致谢
答案 0 :(得分:6)
如果通过使用GLCanvas将JOGL与AWT结合使用,则在AWT事件调度线程执行输入和2D渲染时阻止渲染。
如果JOGL通过使用GLJPanel与AWT结合使用,则在AWT事件调度线程执行输入和2D渲染时阻止渲染+花费额外时间从GPU图形内存执行数据复制到Java2D CPU内存。
JOGL建议直接使用NEWT GLWindow。 NEWT是JOGL的高性能本机窗口工具包。 NEWT与OpenGL渲染并行执行输入。 实现高性能渲染而不被输入事件阻塞,反之亦然。 http://jogamp.org/jogl/doc/NEWT-Overview.html
答案 1 :(得分:1)
我同意xranby但你没有提供有关你项目的足够信息。
如果在错误的位置调用Thread.sleep(),可能会导致与GPU同步的问题并破坏您的性能。
如果你打开自动交换缓冲模式并且无用地手动交换缓冲区,它也会破坏你的性能。
如果你试图让你的OpenGL保持最新状态而没有必要,那么它也会破坏你的表现。
您启用了v-sync吗?你使用FPSAnimator吗?