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. Тем не менее, мне все равно хотелось бы знать, есть ли какие-либо объявленные планы сделать аппаратное ускорение возможным для такого холста.
Ответы
Ответ 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 ничего не рисует.