Android上的硬件层和硬件加速

Mak*_*iev 5 android drawing hardware-acceleration android-canvas android-view

我刚刚阅读了有关硬件加速的内容,并观看了该视频。现在我有点困惑。

硬件加速意味着绘图操作由GPU执行,并且默认情况下在Android 3.0+上启用。如果启用了硬件加速,为什么默认情况下View的图层类型为LAYER_TYPE_NONE?我认为应该是LAYER_TYPE_HARDWARE

硬件层必须做一些事情来保持View屏幕外的缓冲区。

因此,它看起来像常量View.LAYER_TYPE_NONE,,View.LAYER_TYPE_HARDWAREView.LAYER_TYPE_SOFTWARE硬件加速无关。它们是关于将其保留View在屏幕外缓冲区中,以避免每次View透明性和其他一些属性更改时都进行绘制。

she*_*lll 5

View.LAYER_TYPE_HARDWARE意味着视图将由硬件层支持,例如纹理、FBO...因此可以轻松/几乎自由地应用颜色效果、半透明和其他 GPU 效果,而无需重新绘制视图。当视图有这样的效果时或在它被动画之前启用硬件层是很好的。不过,硬件层需要大量 RAM,所以要小心。

此处的文档:LAYER_TYPE_HARDWARE及其引用:

表示该视图具有硬件层。硬件层由特定于硬件的纹理(通常是 OpenGL 硬件上的帧缓冲对象或 FBO)支持,并导致使用 Android 的硬件渲染管道渲染视图,但前提是为视图层次结构打开硬件加速。当硬件加速关闭时,硬件层的行为与软件层完全相同。

硬件层可用于将特定颜色过滤器和/或混合模式和/或半透明应用于视图及其所有子项。

硬件层可用于将复杂的视图树缓存到纹理中并降低绘制操作的复杂性。例如,当使用平移对复杂的视图树进行动画处理时,硬件层只能用于渲染视图树一次。

当旋转变换应用于视图时,硬件层也可用于提高渲染质量。它还可用于在视图上应用 3D 变换时防止潜在的裁剪问题。

编辑:要回答您的问题,该层默认为 NONE,因此它不占用 RAM。硬件加速绘图和硬件层是两个不同的东西。硬件加速绘图意味着绘图命令(例如,在绘制到Canvas中时)是由 GPU 而不是 CPU 完成的。HW 层意味着绘制的结果被保存到 GPU 的内存中,因此结果(例如纹理)可以在以后显示而不是再次重新绘制视图。

编辑 2:第一个编辑是我自己的,但我在编辑时退出了 SO :D