하드웨어 가속

OpenGL ES 1.1 하드웨어 가속을 사용하여 일부 응용 프로그램의 그래픽 성능을 높일 수 있습니다. 표시 객체가 애니메이션으로 제작되는 게임 등의 응용 프로그램에서 특히 유용합니다. 하드웨어 가속을 사용하는 응용 프로그램은 일부 그래픽 프로세스를 CPU에서 iPhone GPU로 오프로드하여 성능을 크게 향상시킬 수 있습니다.

GPU를 사용하도록 응용 프로그램을 디자인하는 경우 내용이 효과적으로 GPU 가속되도록 해 주는 규칙을 따르는 것이 중요합니다.

하드웨어 가속을 사용하려면 Flash Professional CS5의 [iPhone 설정] 대화 상자에 있는 [일반] 탭에서 [렌더링]을 [GPU]로 설정하십시오. 또한 응용 프로그램 설명자 파일에서 renderMode 속성을 gpu 로 설정할 수도 있습니다.

<initialWindow> 
    <renderMode>gpu</renderMode> 
    ...

Flash Professional CS5에서 iPhone 응용 프로그램 속성 설정 응용 프로그램 설명자 파일에서 iPhone 응용 프로그램 속성 설정 을 참조하십시오.

해당 내용이 자주 변경되지 않는 경우 하드웨어 가속으로 빠르게 렌더링될 수 있는 다음과 같은 4가지 표시 객체 클래스가 있습니다.

  • 비트맵 객체

  • cacheAsBitmap 속성이 true 로 설정되고 선택적으로 cacheAsBitmapMatrix 속성이 설정된 2D 표시 객체(아래 참조)

  • 3D 표시 객체(즉, 해당 z 속성이 설정됨)

  • 단색 사각형 채우기가 하나 있고 가장자리가 화면의 픽셀에 맞춰 정렬되는 표시 객체

해당 객체의 위 또는 아래에서 다른 스프라이트에 애니메이션이 적용될 때마다 벡터 기반 객체가 다시 렌더링됩니다. 따라서 애니메이션의 배경 또는 전경으로 사용되는 모든 객체도 이러한 범주 중 하나에 속해야 합니다.

cacheAsBitmap true 로 설정된 표시 객체의 경우 cacheAsBitmapMatrix 를 설정하면 GPU가 행렬 변환으로 만들어진 비트맵을 사용하게 됩니다. GPU는 객체가 회전되거나 크기 조절되는 경우에도 비트맵 표현을 사용합니다. GPU는 CPU가 벡터 렌더링 객체를 다시 그리는 것보다 훨씬 더 빠르게 이 비트맵을 합성하고 애니메이션을 적용할 수 있습니다.

cacheAsBitmap true 로 설정하는 것만으로 표시 객체(및 모든 자식)가 캐시됩니다. 새 영역이 표시될 때 표시 객체가 다시 그려지지 않거나, 결합된 전체 그래픽이 변환됩니다.

표시 객체의 cacheAsBitmapMatrix 속성을 설정하면 표시 객체가 보이지 않을 때에도 응용 프로그램에서 해당 객체의 표현을 만들 수 있습니다. 응용 프로그램은 다음 프레임의 시작 부분에 표시 객체의 캐시된 표현을 만듭니다. 그러면 스테이지에 표시 객체를 추가하는 경우 응용 프로그램에서 해당 객체를 빠르게 렌더링합니다. 또한 응용 프로그램은 객체 회전 또는 크기 조절에 애니메이션을 빠르게 적용할 수 있습니다. 회전 또는 크기 조절되는 객체의 경우 cacheAsBitmap 속성을 설정할 때 cacheAsBitmapMatrix 속성도 함께 설정해야 합니다.

또한 응용 프로그램은 비트맵으로 캐시되는 객체에 대해 알파 변형을 빠르게 수행할 수도 있습니다. 그러나 하드웨어 가속 알파 변형에 대해서는 0에서 1.0 사이의 alpha 값만 지원됩니다. 이는 0에서 256 사이의 colorTransform.alphaMultiplier 설정에 해당합니다.

텍스트 필드와 같이 자주 업데이트되는 객체의 경우 cacheAsBitmap 속성을 true 로 설정하지 마십시오.

자주 변경되는 그래픽 내용이 포함된 표시 객체는 일반적으로 GPU 렌더링을 수행하기에 적절한 대상이 아닙니다. 이는 GPU 성능이 낮은 오래된 장치의 경우 특히 그렇습니다. 그래픽을 GPU에 업로드하는 오버헤드 때문에 CPU 렌더링이 더 나은 선택이 될 수 있습니다.

부모를 기준으로 이동하는 자식 표시 객체가 포함된 표시 객체의 구조를 변경합니다. 자식 표시 객체가 부모의 형제가 되도록 변경합니다. 그러면 각각 고유의 비트맵 표현을 갖게 됩니다. 또한 새 그래픽을 GPU에 업로드할 필요 없이 각 표시 객체가 다른 표시 객체를 기준으로 이동할 수 있게 됩니다.

자식 표시 객체에 애니메이션이 적용되지 않는 표시 목록의 최상위 수준에서 cacheAsBitmap 속성을 true 로 설정합니다. 즉, 움직이는 객체가 없는 표시 객체 컨테이너에 대해 설정합니다. 자식 표시 객체에 대해서는 이 속성을 설정하지 마십시오. 애니메이션이 적용되는 다른 표시 객체가 포함된 스프라이트에 대해서는 이 속성을 설정하지 마십시오 .

표시 객체의 z 속성을 설정한 경우 응용 프로그램에서는 항상 캐시된 비트맵 표현을 사용합니다. 또한 표시 객체의 z 속성을 설정한 후에는 객체를 회전하거나 크기를 조절하더라도 응용 프로그램에서 캐시된 비트맵 표현을 사용합니다. 응용 프로그램에서 z 속성이 설정된 표시 객체에 대해서는 cacheAsBitmapMatrix 속성을 사용하지 않습니다. rotationX , rotationY , rotationZ , transform.matrix3D 속성 등의 3차원 표시 객체 속성을 설정하는 경우에도 동일한 규칙이 적용됩니다.

하드웨어 가속을 사용할 내용이 포함된 표시 객체 컨테이너에 대해서는 scrollRect 또는 mask 속성을 설정하지 마십시오. 이러한 속성을 설정하면 해당 표시 객체 컨테이너 및 자식 객체에서 하드웨어 가속이 비활성화됩니다. mask 속성을 설정하는 대신, 마스크가 적용되는 표시 객체 위에 마스크 표시 객체의 레이어를 두는 방법이 있습니다.

하드웨어 가속에 사용할 수 있는 표시 객체의 크기에는 제한이 있습니다. 오래된 장치에서는 폭과 높이 모두 1024픽셀 이하여야 합니다. 최신 장치에서는 2048픽셀 이하여야 합니다. GPU 렌더링 진단 도구를 사용하여 장치에서 성능을 테스트할 수 있습니다.

GPU는 또한 비트맵 이미지를 저장하는 데 iPhone RAM을 사용합니다. 이때 비트맵 이미지에 필요한 메모리 용량 이상을 사용합니다.

GPU는 각 비트맵 이미지 크기에 대해 2의 거듭제곱 형식으로 메모리를 할당합니다. 예를 들어 GPU는 512 x 1024 또는 8 x 32 크기로 메모리를 예약할 수 있습니다. 또한 9 x 15 픽셀 이미지는 16 x 16 픽셀 이미지와 동일한 메모리 용량을 차지합니다. 캐시된 표시 객체의 경우 각 방향에서 2의 거듭제곱에 가깝지만 이를 초과하지 않는 크기를 사용할 수 있습니다. 예를 들어 33 x 17 픽셀 표시 객체보다는 32 x 16 픽셀 표시 객체를 사용하는 것이 더 효율적입니다.

데스크톱과 같이 다른 플랫폼에 맞춰진 크기의 에셋을 크기 조절된 스테이지에 맞춰 축소하지 마십시오. 대신 cacheAsBitmapMatrix 속성을 사용하거나, iPhone용으로 제작하기 전에 에셋의 크기를 조절하십시오. 3D 객체는 표면 이미지를 캐싱할 때 cacheAsBitmapMatrix 속성을 무시합니다. 따라서 3D 표면에 렌더링될 표시 객체는 제작 전에 크기를 조절하는 것이 좋습니다.

하드웨어 가속을 사용하는 것과 RAM을 사용하는 것에는 서로 절충되는 이점이 있습니다. 메모리 용량이 가득 차면 iPhone OS는 실행 중인 다른 기본 iPhone 응용 프로그램에 알려 메모리를 비우도록 합니다. 해당 응용 프로그램들이 이 알림을 처리하여 메모리를 비우는 작업을 할 때 사용자의 응용 프로그램과 CPU 사이클을 놓고 경합할 수 있습니다. 이에 따라 응용 프로그램의 성능이 일시적으로 저하될 수 있습니다. 실행 중인 프로세스에 사용할 수 있는 메모리가 훨씬 적은 오래된 장치에서 응용 프로그램을 테스트해보는 것이 좋습니다.

iPhone에서 응용 프로그램을 디버그하는 경우 GPU 렌더링 진단 기능을 활성화할 수 있습니다. 이 기능은 응용 프로그램에서 GPU 렌더링을 사용하는 방식을 확인하는 데 도움이 됩니다. 자세한 내용은 iPhone 응용 프로그램 디버그 의 “GPU 렌더링 진단을 사용하여 디버그”를 참조하십시오.

cacheAsBitmapMatrix 속성을 사용하는 방법에 대한 자세한 내용은 휴대 장치용 AIR 응용 프로그램에만 한정된 ActionScript API 의 "DisplayObject.cacheAsBitmapMatrix" 단원을 참조하십시오.