Java硬件加速

Java硬件加速,第1张

Java硬件加速

1)到目前为止,默认情况下从未启用硬件加速,据我所知它尚未更改。要激活渲染加速,请在程序启动时将此arg(-Dsun.java2d.opengl =
true)传递给Java启动器,或者在使用任何渲染库之前进行设置。

System.setProperty("sun.java2d.opengl","true");
它是一个可选参数。

2)是

BufferedImage
封装了管理易失性存储器的一些细节,因为在
BufferdImage
加速时,将其副本存储为V-
Ram中的
VolatileImage

BufferedImage
只要您不弄乱它包含的像素,a的好处就是,只需像调用一样复制它们
graphics.drawImage()
,然后
BufferedImage
在达到一定的非指定数量的副本后,就会加速,它将
VolatileImage
为您管理。

a的缺点

BufferedImage
是,如果您要进行图像编辑,更改中的像素
BufferedImage
,在某些情况下,它将放弃尝试加速它的 *** 作,这时,如果您要寻找用于编辑的高性能渲染,则需要考虑自行管理
VolatileImage
。我不知道哪些 *** 作会让您
BufferedImage
放弃尝试加快渲染速度。

3)使用的优点

createCompatibleImage()/createCompatibleVolatileImage()

ImageIO.read()
不会对默认支持的图像数据模型进行任何转换。因此,如果导入PNG,它将以PNG阅读器构建的格式表示它。这意味着每次由a呈现时,
GraphicsDevice
都必须首先将其转换为兼容的Image
Data Model。

BufferedImage image = ImageIO.read ( url );BufferedImage convertedImage = null;GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment ();GraphicsDevice gd = ge.getDefaultScreenDevice ();GraphicsConfiguration gc = gd.getDefaultConfiguration ();convertedImage = gc.createCompatibleImage (image.getWidth (),image.getHeight (),image.getTransparency () );Graphics2D g2d = convertedImage.createGraphics ();g2d.drawImage ( image, 0, 0, image.getWidth (), image.getHeight (), null );g2d.dispose()

上面的过程会将使用image io api读取的图像转换为BufferedImage,该BufferedImage具有与默认屏幕设备兼容的Image
Data Model,因此在渲染时无需进行转换。最有利的情况是您将非常频繁地渲染图像。

4)您不需要花费精力来批量处理图像渲染,因为Java在大多数情况下都会尝试为您完成此 *** 作。没有理由不能尝试执行此 *** 作,但是总的来说,最好在尝试执行此类性能优化之前,对应用程序进行概要分析并确认图像渲染代码中存在瓶颈。主要缺点是,在每个JVM中实现的方式都略有不同,因此这些增强功能可能一文不值。

5)据我所知,您概述的设计是手动执行Double Buffering并主动呈现应用程序时较好的策略之一。
http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferStrategy.html
在此链接中,您将找到的描述

BufferStrategy
。在描述中,它显示了一个代码片段,这是对
BufferStrategy
对象进行主动渲染的推荐方法。我将这种特殊技术用于我的活动渲染代码。唯一的主要区别是在我的代码中。像您一样,我
BufferStrategy
在的实例上创建了,
Canvas
并将其放在上
Jframe



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5104244.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存