我最近听说VolatileImage的性能有多棒。我决定从BufferedImage切换到VolatileImage,但这让情况变得更糟。
1000 images performance test with BufferedImage:
0.0 ms on average to render a frame
~500 FPS
1000 images performance test with VolatileImage:
1500.0 ms on average to render a frame - that's 1.5 seconds!
<1 FPS
我正在使用graphics.drawImage((进行所有渲染。我在YouTube上看了一个教程,我的代码是一样的,但我的表现仍然很糟糕。
我发现这个线程:Java:VolatileImage比BufferedImage慢,有人在回答中提到这可能是由于混合了加速和非加速操作。如何判断哪些操作是硬件加速的,哪些不是?为什么一切都没有加速以获得最佳性能?
所以我对代码做了一些改动,得到了一些非常有趣的结果。
更改透明模式后,我的表现突飞猛进。最初我使用的是透明。位掩码。现在,当我切换到"透明度"时。半透明的我得到了这些结果:
0.0 ms on average to render a frame
~500 FPS
结果与BufferedImage测试中的结果相同,而我期望具有更好的性能(约600-700 FPS(
但更有趣的是,当我切换到"透明度"时。不透明:
1.0 ms on average to render a frame
~100 FPS
我原以为在没有任何半透明效果的情况下,性能会更好,但我错了。现在我真的被的这种行为弄糊涂了
更新:我创建了一个不同的项目,添加了100000个弹跳球,它运行得非常流畅——30 FPS!当然,我在BufferedImage上也试过。。。并得到了相同的结果。我用不同的量进行了实验,比如300、1000、20000、50000,但所有地方的结果都是一样的。