Аппаратное ускорение Android TextureView с помощью lockCanvas () - PullRequest
16 голосов
/ 01 апреля 2012

Я пытаюсь использовать аппаратное ускорение для Android с моим холстом. Раньше у меня был SurfaceView, который я сделал lockCanvas(), чтобы получить холст, на котором я позже нарисовал, но я изменил на TextureView, так как я не мог SurfaceView использовать аппаратное ускорение. В настоящее время я пытаюсь заставить этот холст использовать аппаратное ускорение.

Canvas canvas = this.lockCanvas();
System.out.println(this.isHardwareAccelerated() + ", " + canvas.isHardwareAccelerated());

дает мне вывод: правда, ложь (this является TextureView)

Кто-нибудь знает, почему canvas не аппаратно ускоряется, и как это сделать?

Редактировать: Насколько я нашел, похоже, что я должен использовать OpenGL. Тем не менее, я все еще хотел бы знать, есть ли объявленные планы сделать аппаратное ускорение возможным для такого холста.

Ответы [ 2 ]

9 голосов
/ 20 февраля 2013

TextureView работает только тогда, когда приложение аппаратно ускоряется, но Canvas, которое возвращается из lockCanvas(), в настоящее время аппаратно не ускоряется.Это означает, что вы будете рисовать внутри TextureView Canvas в программном обеспечении, но само TextureView будет рисоваться с использованием графического процессора.В настоящее время единственный способ получить Canvas с аппаратным ускорением - это использовать onDraw(Canvas) метод View.

6 голосов
/ 04 декабря 2012

Проверьте статью Аппаратное ускорение .

Обычно, если вы хотите, чтобы ваше TextureView было аппаратно ускорено, вы должны убедиться, что аппаратное ускорение включено на некотором уровне в контексте вашего TextureView, т. Е. Одно из следующих:

  • На уровне приложения: <application android:hardwareAccelerated="true" ...>
  • На уровне активности: <activity android:hardwareAccelerated="true" />
  • На уровне окна:

getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

Обратите внимание, что аппаратное ускорение на самом деле является обязательным для использования TextureView :

TextureView можно использовать только в окне с аппаратным ускорением. При визуализации в программном обеспечении TextureView ничего не будет рисовать.

...