2012-03-06 23 views
11

Estoy desarrollando en ICS y tratando de entender por qué un canvas 0.Canvas.isHardwareAccelerated() siempre devolverá FALSE cuando se usa un lienzo dentro de un SurfaceView.Lona en SurfaceView - aceleración por hardware

He intentado un ejemplo muy básico como esto: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html O esta otra: http://jmsliu.com/199/android-canvas-example.html

Incluso les modificado para no tener ninguna llamada de lona en el interior del bucle de tracción pensar que podría haber conseguido de alguna operaciones de aceleración de HW no admitidas para determinadas llamadas de dibujo. Revisé esta lista en "Operaciones de dibujo no admitidas" developer.android.com/guide/topics/graphics/hardware-accel.html pero no estoy haciendo nada de eso.

estoy usando el indicador de fuerza de la GPU de representación dentro de las Opciones de desarrollo junto con dentro de los manifiestos, también estoy especificando minSDK/targetSDK> = 14.

El View.isHardwareAccelerated devolverá TRUE, mientras que el Canvas.isHardwareAccelerated devolverá siempre FALSE.

He visto que Canvas.java tiene un código de barras devuelto falso para isHardwareAccelerated(), mientras que HardwareCanvas.java ha devuelto verdadero. Supongo que por alguna razón no estoy recibiendo el camino de HW, ¿por qué?

¿Se puede acelerar un Lienzo dentro de un SurfaceView HW?

Gracias

Respuesta

1

¿Usted ha indicado en su manifiesto de Android, que su aplicación quiere utilizar la aceleración HW?

Esto sería algo así como <application android:hardwareAccelerated="true" ...>

Dependiendo de lo que quiere hacer también podría ser útil para activar la aceleración única sólo para una actividad o una ventana, ver http://developer.android.com/guide/topics/graphics/hardware-accel.html para más detalles.

Rudi

+0

Sí, he indicado en mi archivo de manifiesto, de hecho, puedo ver el acelerador de vista acelerado pero no el lienzo. – user1019096

+0

no tengo ni idea ... – nanoquack

+0

Funcionó para mí –

14

un lienzo devueltos por SurfaceView.lockCanvas() no puede ser acelerado por hardware en el momento.

+1

¿Sigue siendo así en JellyBean (4.2.1)? – Yahma

+3

Sí, todavía es el caso. –

+2

@RomainGuy Encontré hide api 'public Canvas lockHardwareCanvas()' pero no vi dónde usarlo, ¿es posible usar este método para acelerar el hardware de SurfaceView? – Juude

3

parece que hay un nuevo método de ocultar API unlockHardwareCanvas en android.view.Surface

y aquí está el ejemplo: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

puede utilizar relfecation en entornos de producción.

Cuestiones relacionadas