我一直在花一些时间研究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。这是一种好习惯吗,还是我应该采用其他方式?
非常感谢您抽出宝贵的时间,希望我提供了明确的问题和足够的信息,以帮助您回答我的几个问题。