LAYER_TYPE_HARDWARE и рисование в кеш

Представление может иметь layerType типа LAYER_TYPE_HARDWARE (view.setLayerType(LAYER_TYPE_HARDWARE, null)), который указывает ему нарисовать кэш в графическом процессоре. Как я могу сказать, как часто этот кеш рисуется? Каковы правила для этого? Я бы предположил, что каждый раз, когда вызовы просмотра становятся недействительными или onDraw, LAYER_TYPE_HARDWARE должен создать новый кеш. Если это так, то для представления, которое часто вызывает onDraw, было бы лучше не иметь LAYER_TYPE_HARDWARE, так как работы в два раза больше (поскольку рисование в кэш, который не используется, было бы непосильным).

Во всяком случае, я не вижу никаких хуков, которые я могу зарегистрировать, и настройка параметров dev для прошивки экрана на GPU тоже ничего не делает.

TL: DR, как я узнаю, когда создается новый кеш слоя?

1 ответ

Как я узнаю, когда создается новый кэш слоев?

Он создается при первом вызове view.setLayerType(LAYER_TYPE_HARDWARE, null)

За кулисами снимок вашего вида берется и загружается в виде текстуры в графический процессор.

Как я могу сказать, как часто этот кеш рисуется? Каковы правила для этого?

Если вы изменяете определенные свойства, такие как альфа, координаты вида, масштабирование или поворот вида, новая текстура не загружается в графический процессор. Вот почему аппаратные слои хороши для определенных типов анимации, потому что вместо перерисовки (и, следовательно, повторной загрузки текстуры в случае слоев) вы можете просто отправлять матрицы преобразования в графический процессор.

Если вы измените какое-либо другое свойство представления, новая текстура будет загружена в графический процессор, что может оказаться дорогостоящим, если вы делаете это в анимации.

Я бы предположил, что каждый раз, когда вызовы просмотра становятся недействительными или onDraw, LAYER_TYPE_HARDWARE должен создать новый кеш.

Зависит. Как упомянуто в предыдущем параграфе, недействительность не вызовет перерисовки, если вы используете дружественные к слою свойства, такие как альфа, х, у, масштабирование и поворот. В этом случае новая текстура не загружается.

Однако аннулирование из-за изменений других свойств приведет к загрузке текстуры и будет медленнее, чем просто рисование без слоев.

Другие вопросы по тегам