Холст в SurfaceView - аппаратное ускорение

Я разрабатываю ICS и пытаюсь понять, почему Canvas.isHardwareAccelerated() всегда будет возвращать FALSE при использовании Холст внутри SurfaceView.

Я пробовал очень простой пример: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html Или этот: http://jmsliu.com/199/android-canvas-example.html

Я даже модифицировал их, чтобы не иметь никаких холстов-вызовов внутри цикла рисования думая, что я мог бы получить некоторые неподдерживаемые операции ускорения HW для некоторых вызовов рисования. Я проверил этот список в разделе "Неподдерживаемые операции рисования" developer.android.com/guide/topics/graphics/hardware-accel.html но я не делаю этого.

Я использую флаг рендеринга Force GPU внутри параметров разработчика вместе с внутри манифеста, также я указываю minSDK/targetSDK >= 14.

View.isHardwareAccelerated вернет TRUE, в то время как Canvas.isHardwareAccelerated всегда будет возвращать FALSE.

Я видел, что Canvas.java имеет hard-encodeded return false для isHardwareAccelerated(), а HardwareCanvas.java возвращает true. По некоторым причинам, я не получаю HW-путь, почему?

Можно ли ускорить холст внутри SurfaceView?

Спасибо

Ответ 1

Холст, возвращенный SurfaceView.lockCanvas(), не может быть аппаратным ускоренным в данный момент.

Ответ 2

кажется, что существует новый метод api для скрытия unlockHardwareCanvas в android.view.Surface

и вот пример: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

вы можете использовать relfecation в производственных средах.

Ответ 3

Вы заявили в своем манифестах Android, что ваше приложение хочет использовать ускорение hw?

Это будет что-то вроде <application android:hardwareAccelerated="true" ...>

В зависимости от того, что вы хотите сделать, может быть полезно только активировать ускорение только для активности или окна, см. http://developer.android.com/guide/topics/graphics/hardware-accel.html для Детали.

Руди