我们什么时候应该使用LAYER_TYPE_HARDWARE

时间:2014-11-26 13:21:37

标签: android opengl-es

阅读http://developer.android.com/guide/topics/graphics/hardware-accel.html后,我对3种不同类型的分层技术的理解是(假设设备有GPU)

  • LAYER_TYPE_SOFTWARE - 绘图由软件在屏幕外的位图内存中执行。然后,软件的屏幕外位图将传输到GPU。 GPU 在屏幕上渲染位图。
  • LAYER_TYPE_NONE - GPU将直接在屏幕上绘制
  • LAYER_TYPE_HARDWARE - Draw 由GPU在GPU的屏幕外位图内存中执行。然后,GPU的屏幕外位图将通过GPU 渲染到屏幕上。

何时使用LAYER_TYPE_SOFTWARE

我理解某些绘制操作并非由setShadowLayer等GPU支持。因此,我们需要切换到LAYER_TYPE_SOFTWARE,以便 draw 将由软件执行。

但是,由于软件的屏幕外位图内存已转移到GPU操作,因此事情可能会显得较慢。

何时使用LAYER_TYPE_NONE

我认为这是大多数设备的默认设置。所以,我认为我们应该在大多数时候使用这种技术。

何时使用LAYER_TYPE_HARDWARE

我不知道何时使用这种技术。我们非常感谢任何一个例子,我们应该应用LAYER_TYPE_HARDWARE技术。

p / s另外,我对 LAYER_TYPE _... 的理解可能显得有误。如果你发现任何错误,请纠正我。谢谢。

2 个答案:

答案 0 :(得分:1)

何时使用LAYER_TYPE_HARDWARE

当我想绘制一个剪切父视图的文本时(允许您查看它),我使用:

for(int i=0;i<100;++i)
{
  // do a lot of with it, call functions and so on but always use data_array[i]
}

例如在我的自定义视图中:

setLayerType(View.LAYER_TYPE_HARDWARE, null)

结果:

https://angular.io/guide/reactive-forms#dynamic-controls-using-form-arrays

并且未设置LAYER_TYPE_HARDWARE:

enter image description here

答案 1 :(得分:0)

基本上像绘图缓存一样。如果自定义视图的渲染/绘制成本很高,但是内容的更改不会经常发生,那么我将使用该标志。否则,您只会无缘无故地强调设备以进行缓存。