2012-03-06 5 views
11

Sto sviluppando su ICS e sto cercando di capire perché un Canvas.isHardwareAccelerated() restituirà sempre FALSE quando si utilizza una tela all'interno di SurfaceView.Canvas in SurfaceView - accelerazione hardware

Ho provato un esempio molto semplice come questo: http://android-coding.blogspot.com/2011/05/drawing-on-surfaceview.html o questa: http://jmsliu.com/199/android-canvas-example.html

ho addirittura modificato a non avere tutte le chiamate di tela all'interno del ciclo sorteggio pensando che avrei potuto ottenuto in qualche operazioni di accelerazione HW non supportate per alcune chiamate di disegno. Ho controllato questa lista sotto "disegno operazioni non supportate" developer.android.com/guide/topics/graphics/hardware-accel.html ma non sto facendo niente di tutto questo.

Sto usando la bandiera di rendering Forza GPU all'interno delle Opzioni Developer insieme all'interno manifesti, anche io sto specificando minSDK/targetSDK> = 14.

Il View.isHardwareAccelerated ritornerà TRUE, mentre il Canvas.isHardwareAccelerated restituirà sempre FALSE.

Ho visto che Canvas.java ha hard-codeded return false per isHardwareAccelerated(), mentre HardwareCanvas.java ha restituito true. Suppongo che per alcuni motivi non sto seguendo il percorso HW, perché?

Una tela in SurfaceView può essere accelerata con HW?

Grazie

risposta

1

Avete indicato nel vostro manifest Android, che la vostra applicazione vuole usare l'accelerazione hw?

Questo sarebbe qualcosa di simile <application android:hardwareAccelerated="true" ...>

A seconda di cosa si vuole fare potrebbe anche essere utile solo attivare l'accelerazione solo per un'attività o una finestra, vedere http://developer.android.com/guide/topics/graphics/hardware-accel.html per i dettagli.

Rudi

+0

Sì, ho dichiarato nel mio file manifest, in effetti, posso vedere l'accelerazione vista HW ma non la tela. – user1019096

+0

non ho nemmeno indizio ... – nanoquack

+0

Ha funzionato per me –

14

una tela restituiti da SurfaceView.lockCanvas() non possono essere accelerazione hardware al momento.

+1

E 'ancora così in JellyBean (4.2.1)? – Yahma

+3

Sì, è ancora il caso. –

+2

@RomainGuy Ho trovato hide hide "public Canvas lockHardwareCanvas()' ma non ho visto dove usarlo, è possibile utilizzare questo metodo per accelerare l'hardware di SurfaceView? – Juude

3

sembra che ci sia un nuovo metodo di nascondere api unlockHardwareCanvas in android.view.Surface

e qui è l'esempio: http://androidxref.com/5.1.0_r1/xref/frameworks/base/tests/HwAccelerationTest/src/com/android/test/hwui/HardwareCanvasSurfaceViewActivity.java

è possibile utilizzare relfecation in ambienti di produzione.