3

방금 ​​전에 읽은 Hardware Accelerationthis video.을 보았습니다. 조금 혼란스러워졌습니다.Android의 하드웨어 레이어 및 하드웨어 가속

하드웨어 가속은 그리기 작업이 GPU에 의해 수행되며 기본적으로 Android 3.0 이상에서 사용 가능하다는 것을 의미합니다. 하드웨어 가속을 사용하는 경우 이 기본값 인 이유는 View의 레이어 유형이 왜입니까? 나는 그것이 LAYER_TYPE_HARDWARE이어야한다고 생각했다.

하드웨어 레이어은 화면 외부 버퍼에 View을 유지하면서 무언가를해야합니다.

따라서 View.LAYER_TYPE_NONE, View.LAYER_TYPE_HARDWAREView.LAYER_TYPE_SOFTWARE은 하드웨어 가속과 관련이 없습니다. 그들은 View을 오프 스크린 버퍼에 유지하여 View의 투명도와 다른 속성이 변경 될 때마다 그리지 않도록합니다.

답변

2

View.LAYER_TYPE_HARDWARE은보기가 하드웨어 레이어로 백업됨을 의미합니다. 텍스처, FBO ... 따라서 뷰를 다시 그릴 필요없이 색상 효과, 반투명 및 기타 GPU 효과를 적용하는 것이 쉽거나 거의 없습니다. 보기에 효과가 있거나 애니메이션이 적용되기 전에 하드웨어 레이어를 활성화하는 것이 좋습니다. 하드웨어 계층은 많은 RAM을 필요로하므로 조심하십시오.

여기 문서 : LAYER_TYPE_HARDWARE과 그것에서 인용 :

뷰가 하드웨어 층을 가지고 있음을 나타냅니다. 하드웨어 계층은 하드웨어 특정 텍스처 (일반적으로 OpenGL 하드웨어의 프레임 버퍼 객체 또는 FBO)에 의해 지원되며 뷰 계층 구조에 대해 하드웨어 가속이 켜져있는 경우에만 안드로이드의 하드웨어 렌더링 파이프 라인을 사용하여 뷰를 렌더링합니다. 하드웨어 가속이 꺼지면 하드웨어 계층이 소프트웨어 계층과 똑같이 작동합니다.

하드웨어 레이어는 특정 색상 필터 및/또는 혼합 모드 및/또는 반투명을보기 및 모든 하위 항목에 적용하는 데 유용합니다.

하드웨어 계층을 사용하여 복잡한 뷰 트리를 텍스처로 캐시하고 그리기 작업의 복잡성을 줄일 수 있습니다. 예를 들어, 복잡한 뷰 트리를 애니메이션으로 변환 할 때 하드웨어 계층을 사용하여 뷰 트리를 한 번만 렌더링 할 수 있습니다.

회전 변환이 뷰에 적용될 때 렌더링 품질을 높이기 위해 하드웨어 레이어를 사용할 수도 있습니다. 또한 뷰에 3D 변형을 적용 할 때 발생할 수있는 클리핑 문제를 방지하는 데에도 사용할 수 있습니다.

편집 : 그것은 RAM을지지 않습니다 귀하의 질문에 대답하려면, 레이어는 기본 NONE입니다. HW 가속 도면과 하드웨어 계층은 서로 다른 두 가지 요소입니다. HW 가속 그리기는 그리기 명령 (예 : Canvas으로 드로잉 할 때는 CPU 대신 GPU를 사용합니다. HW 레이어는 그리기 결과가 GPU의 메모리에 저장되므로 다시보기를 다시 그리는 대신 나중에 결과 (예 : 텍스처)를 표시 할 수 있음을 의미합니다.

편집 2 : 첫 번째 편집 내 자신하지만 편집하는 동안 SO에서 로그 아웃했다 : D

1

간단한 언어에서, 그것은을 좋아한다 : 하드웨어 가속이 API에 기본적으로 사용할 수있는 기능입니다 14+ 모든 2D 드로잉 작업에 지원되지는 않습니다. 즉, 일부 사용자 지정보기는 지원하지 않을 수도 있지만 기본적으로 사용하도록 설정되어 있기 때문에 일부 사용자 지정보기 렌더링 문제가 발생할 수 있습니다. 문제의 경우 하나 아래 링크

확인 : http://postimg.org/image/6wzssbdbr/

유형의 레이어에 오는, 안드로이드의 모든 버전에서, 전망은 어느 뷰의 드로잉 캐시를 사용하여 오프 스크린 버퍼로 렌더링 할 수있는 능력이 있었다 또는 Canvas.saveLayer()를 사용합니다. 오프 스크린 버퍼 또는 레이어는 여러 용도로 사용됩니다. 복잡한보기에 애니메이션을 적용하거나 컴포지션 효과를 적용 할 때이를 사용하여 더 나은 성능을 얻을 수 있습니다.

LAYER_TYPE_NONE :보기가 정상적으로 렌더링되고 오프 스크린 버퍼로 백업되지 않습니다. 이것은 1에서 13까지의 모든 API에 대한 기본 동작입니다.

LAYER_TYPE_HARDWARE : 응용 프로그램이 하드웨어 가속화되면보기가 하드웨어에서 하드웨어 텍스처로 렌더링됩니다. 응용 프로그램이 하드웨어 가속화가 아닌 경우이 계층 유형은 LAYER_TYPE_SOFTWARE와 동일하게 작동합니다. 이것은 모든 API 14+의 기본 동작입니다.

LAYER_TYPE_SOFTWARE : 뷰가 소프트웨어로 비트 맵으로 렌더링됩니다.

모든보기에 필요한 경우, 사용자는 ViewObject.setLayerType (View.LAYER_TYPE_SOFTWARE, null);을 설정하여이보기를 사용하지 못하게 할 수 있습니다.

희망 사항입니다.

관련 문제