Java:VolatileImage比BufferedImage慢

6
我正在使用Java制作游戏,并使用BufferedImages将内容呈现到屏幕上。在低端机器上运行游戏时出现性能问题,因此我切换到通常更快的VolatileImage。但实际上它们会使整个游戏变慢。这些图像是使用GraphicsConfiguration.createCompatibleVolatileImage(...)创建的,并使用Graphics.drawImage(...)(点击链接查看具体信息)绘制到画布上,使用双缓冲技术进行绘制。请问有人知道出了什么问题吗?

我也注意到了相同的事情。 - Hardcoded
如果你的显卡内存不足,显然是没有帮助的。据我所知,BufferedImage 已经有了一些加速,所以差异可能不再像以前那么大了。 - Tom Hawtin - tackline
@Norswap:我真的认为找到一个好的答案在于寻找顶尖的开源Java游戏(肯定有一些)或一些伟大的Java演示文稿(来自“演示场景”),并尝试理解他们所做的事情。我曾经很久以前在非常奇特的硬件上编写游戏和演示文稿(像Amiga,SNES,mode 13x等),但我仍然不知道如何在Java中“推动像素”。这再次是Java被“过度设计”且不必要复杂的领域之一。我并不期望有人在SO上能真正帮助你。 - SyntaxT3rr0r
这绝对不是视频内存的问题(我只有700kb的图像需要保存在内存中)。我的一个朋友在他自己的游戏中使用VolatileImages(他在同一台电脑上测试),他说当从BufferedImages切换时,他看到了10倍的速度提升。 - Norswap
1个回答

6

很可能你的代码混合了加速和未加速操作。

这篇文档必读。特别是第3.2节对于任何使用加速Java图形的人来说都是必不可少的。


在图像缩放方面(指裁剪,请参见问题中的链接),进行非加速操作是否可能?由于我使用精灵表,每次绘制都必须有效地选择要绘制到屏幕上的图像部分。 - Norswap

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接