【问题标题】:Explanation on MAJOR performance difference between LWJGL and other OpenGL implementations解释 LWJGL 和其他 OpenGL 实现之间的主要性能差异
【发布时间】:2014-03-30 17:13:49
【问题描述】:

为什么 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 有像 Occlusion Culling 这样的东西,所以它通常是最快的,但即使在使用 Ogre3D 的类似调用时,我认为期望与 LWJGL 类似的结果...... Ogre3D 和 LWJGL 都只做正面剔除,但 LWJGL 没有与渲染一切相比,没有任何形式的性能提升。最后一件事,LWJGL 倾向于打破 2.5 GB 的 RAM 使用量来渲染 Sponza,但这并不能解释其他结果。

【问题讨论】:

  • LWJGL 是基于 java 的,使用 ByteBuffers 和 JNA 调用,这些本身并不便宜
  • LWJGL 不是 OpenGL 实现。 GPU 驱动程序是 OpenGL 实现。 LWJGL 是一种语言绑定,与使用 OpenGL 并在同一系统上运行的所有其他程序一样,它与相同的 OpenGL 驱动程序(=实现)接口。

标签: performance opengl unity3d lwjgl ogre3d


【解决方案1】:

如果有人遇到同样的问题,那么问题不是我意识到的 java。将立即绘制调用记录到显示列表中的使用已被贬低,并且会产生较差的性能。您必须使用 VBO 而不是显示列表。就我的笔记本电脑而言,您可以期望性能提高多达 600 倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 2011-02-09
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2020-08-09
    • 1970-01-01
    相关资源
    最近更新 更多