Android TextureView аппаратное ускорение с lockCanvas() - программирование
Подтвердить что ты не робот

Android TextureView аппаратное ускорение с lockCanvas()

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

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

Дает мне вывод: true, false (this является TextureView)

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

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

4b9b3361

Ответ 1

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

Ответ 2

Проверьте статью Hardware Acceleration.

В принципе, если вы хотите, чтобы ваш 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 ничего не рисует.