我一直在研究 Java 的硬件加速特性,但我仍然有点困惑,因为我在网上找到的网站都没有直接明确回答我的一些问题。以下是我对 Java 硬件加速的疑问:
1) 在 Eclipse 版本 3.6.0 中,带有 Mac OS X 的最新 Java 更新(我认为是 1.6u10),是否默认启用硬件加速?我在某处读到
someCanvas.getGraphicsConfiguration().getBufferCapabilities().isPageFlipping()
应该指示是否启用了硬件加速,并且我的程序在我的主 Canvas 实例上运行以进行绘图时报告返回 true。如果我的硬件加速现在没有启用,或者默认情况下,我需要做什么来启用它?
2)我在这里和那里看过几篇关于BufferedImage和VolatileImage之间区别的文章,主要是说VolatileImage是硬件加速图像并且存储在VRAM中以进行快速复制操作。但是,我还发现了一些 BufferedImage 也被称为硬件加速的实例。BufferedImage 硬件是否也在我的环境中加速?如果两种类型都是硬件加速的,那么使用 VolatileImage 有什么好处?我对在两者都有加速的情况下拥有 VolatileImage 的优势的主要假设是 VolatileImage 能够检测到它的 VRAM 何时被转储。但是如果 BufferedImage 现在也支持加速,那它是不是也内置了同样的检测功能,只是对用户隐藏,以防内存被转储?
3)使用有什么好处吗
someGraphicsConfiguration.getCompatibleImage/getCompatibleVolatileImage()
与
ImageIO.read()
在一个教程中,我一直在阅读有关正确设置渲染窗口的一些一般概念(教程),它使用 getCompatibleImage 方法,我相信该方法返回一个 BufferedImage,以获取他们的“硬件加速”图像以进行快速绘图,这与问题有关2 关于它是否是硬件加速的。
4)这是较少的硬件加速,但这是我一直很好奇的事情:我需要订购哪些图形被绘制?我知道,当通过 C/C++ 使用 OpenGL 时,最好确保在需要一次绘制的所有位置都绘制相同的图形,以减少当前纹理需要切换的次数。从我读到的内容来看,Java 似乎会为我解决这个问题,并确保以最优化的方式绘制内容,但同样,从来没有人这么清楚地说过这样的话。
5) 哪些 AWT/Swing 类支持硬件加速,应该使用哪些?我目前正在使用一个扩展 JFrame 的类来创建一个窗口,并向它添加一个 Canvas,我从中创建一个 BufferStrategy。这是一种很好的做法,还是我应该以其他方式来实现它?
非常感谢您抽出宝贵时间,我希望我提供了明确的问题和足够的信息,以便您回答我的几个问题。