OpenGLES Programming Guide for iOS 번역 - 3장. OpenGL ES 기능 판정
OpenGL ES/iOS 2011. 9. 21. 12:22본 번역은 얼마든지 정확하지 않을 수 있습니다. 참고용으로만 보시길... ^^;;;
OpenGL ES는 OpenGL ES 1.1 및 2.0 규격 모두 최소한의 표준을 정의하는 모든 것을 구현하고 지원해야 합니다만, OpenGL ES의 사양은 그 기능에 대한 구현을 제한하지는 않습니다. OpenGL ES의 사양은 구현에서 다양한 방법으로 그 기능을 확장할 수 있습니다.
구현의 자세한 기능은 구현 사양 버전의 기반이되는 그래픽 하드웨어 및 장치에서 실행되는 iOS 버전에 따라 다를 수 있습니다.
OpenGL ES 1.1 응용프로그램 또는 OpenGL ES 2.0 응용프로그램의 두 빌드를 선택한 경우에도 응용프로그램을 최소화하는 것은 기반이되는 구현의 기능을 정확하게 결정하는 것입니다.
기능을 결정하는 응용프로그램은 현재 컨텍스트를 설정하고 1 개 이상의 OpenGL ES 함수를 호출하여 구현의 구체적인 기능을 가져옵니다. 컨텍스트 기능은 컨텍스트가 만들어진 후에는 변경되지 않습니다. 응용프로그램 기능을 한 번 테스트할 수 있으며, 그 기능을 사용하여 기능에 맞게 드로잉 코드를 조정할 수 있습니다.
예를 들어, 구현이 제공하는 텍스쳐 유닛의 수에 따라 연산을 단일 경로 및 다중 경로에서 실행하고 더 간단한 알고리즘을 선택하고 수 있습니다. 일반적인 패턴은 공통의 슈퍼 클래스를 공유하는 클래스를 사용하여 응용 프로그램의 렌더링 패스마다 클래스를 설계하는 것입니다. 런타임에 맞는 기능에 가장 적합한 클래스를 인스턴스화 합니다.
구현 종속 값 읽기
OpenGL ES 의 사양은 OpenGL ES 구현 기능의 제한을 정의하는 구현 의존의 값을 정의합니다.
예를 들어 텍스처의 최대 크기와 텍스처 유닛의 수는 두 버전에 공통의 구현 의존 값이 응용프로그램에서 확인이 전제됩니다. PowerVR SGX 소프트웨어가 지원하는 텍스처는 최대 2048x2048 이지만 PowerVR MBX 그래픽 하드웨어를 지원하는 iOS 장치는 최대 1024x1024 크기의 텍스처를 지원합니다. 두 크기도 OpenGL ES 사양에서 요구되는 최소 크기 64x64 를 크게 웃돌고 있습니다. 응용 프로그램 요구 사항이 OpenGL ES 사양이 요구하는 최소 기능을 초과하는 경우 응용프로그램이 구현에 문의하여 하드웨어의 실제 기능을 확인하고 해당 오류를 발생시킵니다. 이러한 경우, 더 작은 텍스처를 로드하거나 다른 렌더링 방법을 선택하고 수 있습니다.
사양은 이러한 제한의 포괄적인 목록을 제공하고 있습니다만, 그 일부는 대부분의 OpenGL 응용 프로그램에서 중요합니다. 표 3-1 에서는 OpenGL ES 1.1 응용 프로그램 및 OpenGL ES 2.0 응용 프로그램을 모두 테스트 해야하는 값 목록을 보여줍니다.
표 3-1 공통 OpenGL ES 구현 종속 값
T텍스처의 최대 사이즈 (Maximum size of the texture) | GL_MAX_TEXTURE_SIZE |
깊이버퍼 플레인의 수 (Number of depth buffer planes) | GL_DEPTH_BITS |
스텐실 버퍼 플레인의 수 (Number of stencil buffer planes) | GL_STENCIL_BITS |
OpenGL ES 2.0 응용 프로그램의 경우 응용프로그램은 먼저 쉐이더에 설정된 제한을 읽어 취할 필요가 있습니다. 모든 그래픽 하드웨어는 수에 한계가 있지만, 정점 셰이더와 조각 쉐이더에 전달할 수있는 특성을 지원합니다. OpenGL ES 2.0 구현은 구현이 제공하는 값을 응용프로그램 넘는 경우 소프트웨어 대체를 제공할 필요가 없습니다. 응용프로그램은 사양이 정하는 최소 미만 계속 사용하거나 또는 표 3-2 과 쉐이더의 제한을 확인하고 제한 범위 내에서 사용할 수있는 쉐이더를 선택합니다.
표 3-2 OpenGL ES 쉐이더 값
정점 속성의 최대 갯수 (Maximum number of vertext attribuets) | GL_MAX_VERTEX_ATTRIBS |
점정 벡터의 최대 갯수 (Maximum number of uniform vertex vectors) | GL_MAX_VERTEX_UNIFORM_VECTORS |
조각 벡터의 최대 갯수 (Maximum number of unifrom fragment vectors) | GL_MAX_FRAGMENT_UNIFORM_VECTORS |
Varying 벡터의 최대 갯수 (Maximum number of varying vectors) | GL_MAX_VARYING_VECTORS |
정점 쉐이더에서 사용 가능한 텍스처 유닛의 최대 갯수 (Maximum number of texture units usable in a vertex shader) | GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS |
조각 쉐이더에서 사용 가능한 텍스처 유닛의 최대 갯수 (Maximum number of texture units usable in a fragment shader) | GL_MAX_TEXTURE_IMAGE_UNITS |
모든 종류의 벡터에 대해 쿼리는 4 개의 구성 요소로 구성된 사용 가능한 부동 소수점 벡터의 수를 반환합니다.
OpenGL ES 1.1 응용프로그램은 텍스처 유닛의 수와 사용 가능한 클리핑 플레인 수를 확인할 필요가 있습니다 (표 3-3 참조).
표 3-3 OpenGL ES 1.1 값
고정 기능 파이프라인에서 사용 가능한 테스처 유니의 최대 갯수 (Maximum number of texture units available to the fixed function pipeline) |
GL_MAX_TEXTURE_UNITS |
클리핑 평면의 최대 갯수 (Maximum number of clip planes) | GL_MAX_CLIP_PLANES |
확장 기능을 사용하기 전 확인 사항
OpenGL을 ES 구현은 OpenGL ES 확장 기능을 구현하여 OpenGL ES API에 새로운 기능을 추가할 수 있습니다.
응용프로그램이 사용하려고 하는 기능이 포함된 OpenGL ES 확장 기능의 존재를 확인하여야 합니다.
단지 1 개의 예외가 OES_framebuffer_object 확장이 확장 기능은 iOS 에서의 OpenGL ES 1.1 의 모든 구현에서 항상 제공됩니다.
iOS 응용프로그램에 의한 드로잉 대상 프레임 버퍼의 유일한 종류로 프레임 버퍼 개체를 사용합니다.
목록 3-1 는 확장 기능의 존재 확인에 사용할 수있는 코드를 소개합니다.
목록 3-1 OpenGL ES 확장 확인
BOOL CheckForExtension(NSString *searchName)
{
// For performance, the array can be created once and cached.
NSString *extensionsString = [NSString stringWithCString:glGetString(GL_EXTENSIONS) encoding: NSASCIIStringEncoding];
NSArray *extensionsNames = [extensionsString componentsSeparatedByString:@""];
return [extensionsNames containsObject: searchName];
}
오류 확인을위한 glGetError 호출
디버그 버전의 응용프로그램은 정기적으로 glGetError 함수를 호출하여 반환되는 모든 오류에 플래그를 설정해야합니다. glGetError 함수가 오류를 반환하면 해당 오류는 응용프로그램이 OpenGL ES API 를 잘못 사용하고 있는지 또는 요청된 작업을 기반이되는 구현을 수행할 수 없음을 의미합니다.
glGetError 함수를 반복 호출하면 응용프로그램의 성능이 크게 저하될 수 있습니다. 이 함수의 호출은 응용 프로그램의 릴리스 버전에서는 줄여야 합니다.
'OpenGL ES > iOS' 카테고리의 다른 글
OpenGLES Programming Guide for iOS 번역 - 5장. 멀티테스킹을 지원하는 OpenGL ES 응용프로그램 구현 (0) | 2011.09.21 |
---|---|
OpenGLES Programming Guide for iOS 번역 - 4장. OpenGL ES 드로잉 (0) | 2011.09.21 |
OpenGLES Programming Guide for iOS 번역 - 2장. OpenGL ES 컨텍스트 설정 (0) | 2011.09.21 |
OpenGLES Programming Guide for iOS 번역 - 1장. iOS의 OpenGL ES (0) | 2011.09.20 |
OpenGLES Programming Guide for iOS 번역 - OpenGL ES에 대해 (0) | 2011.09.09 |