我最近听说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 slower than BufferedImage和有人在回答中提到,这可能是由于混合加速和非加速的操作。我如何知道哪些操作是硬件加速的,哪些是不加速的?为什么每件事都不是为了最好的表现而加速呢?
发布于 2022-07-28 13:13:20
所以我把代码搞得乱七八糟,得到了一些非常有趣的结果。
在改变透明度模式后,我的表现猛增。最初我使用的是Transparency.BITMASK。现在,当我切换到Transparency.TRANSLUCENT时,我得到了以下结果:
0.0 ms on average to render a frame
~500 FPS结果与BufferedImage测试的结果相同,而我预期性能会更好(~600-700 FPS)。
但更有趣的是,当我切换到Transparency.OPAQUE时:
1.0 ms on average to render a frame
~100 FPS我原以为没有任何半透明效果的表现会好得多,但我错了。现在我真的被这种行为弄糊涂了
更新:我创建了一个不同的项目,增加了100000个弹跳球,它运行的黄油平滑- 30 FPS!我当然和BufferedImage一起试过了..。得到了同样的结果。我试验了不同的剂量,比如300,1000,20000,50000,但是结果都是一样的。
https://stackoverflow.com/questions/73151536
复制相似问题