LWJGL 与其他 OpenGL 实现之间主要性能差异的说明

Har*_*G16 1 opengl performance ogre3d lwjgl unity-game-engine

为什么 LWJGL 比 OpenGL 甚至 Ogre3D 的 Unity 实现要慢得多?我将从一些我测试过的“基准”(如果你这么称呼它们的话)开始。

硬件:

  • i5 - 3570k @ 4.3GHZ

  • GTX 780 @ 1150 MHz

第一次测试:在屏幕上放置 350,000 个三角形(改进的斯坦福龙)

结果:

  • GTX 780 以 37 FPS 渲染(使用 LWJGL)
  • GTX 780 渲染速度约为 300 FPS(使用 UNITY3D)
  • GTX 780 渲染速度约为 280 FPS(使用 OGRE3D)

第二次测试:使用纹理渲染 Crytek Sponza(我相信大约有 200,000 个顶点?)

结果:

  • GTX 780 以 2 FPS 渲染(使用 LWJGL)
  • GTX 780 渲染速度约为 150 FPS(使用 UNITY3D)
  • GTX 780 渲染速度约为 130 FPS(使用 OGRE3D)

通常我使用 Ogre3D、Unity3D 或 Panda3D 来渲染我的游戏项目,但帧速率的差异是惊人的。我知道Unity有诸如遮挡剔除之类的东西,所以它通常是最快的,但即使在Ogre3D中使用类似的调用时,我认为也会得到与LWJGL类似的结果...Ogre3D和LWJGL都只进行正面剔除,但LWJGL不这样做与渲染所有内容相比,不会获得任何形式的性能提升。最后一件事,LWJGL 渲染 Sponza 时往往会打破 2.5 GB 的 RAM 使用量,但这并不能解释其他结果。

Har*_*G16 5

如果有人遇到同样的问题,我已经意识到问题不是java。将立即绘制调用记录到显示列表中的做法已被弃用,并且性能较差。您必须使用 VBO 而不是显示列表。就我的笔记本电脑而言,您的性能预计可提高 600 倍。