Frogblast가 말한 것을 확장하면 템플릿 코드는 ES1Renderer
과 ES2Renderer
의 두 클래스를 정의합니다. EAGLView
클래스는 먼저 ES2Renderer
인스턴스를 만들려고 시도하지만 실패 할 경우 ES1Renderer
인스턴스를 만듭니다. 실패는 ES2Renderer
다음 코드를 사용하여 OpenGL을 ES 2.0 컨텍스트를 설정 할 수없는 경우에 대해 제공 : 장치에서 OpenGL ES 2.0을 지원하는 경우
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
[self release];
return nil;
}
을이 성공해야합니다. 그렇지 않은 경우 응용 프로그램은 ES1Renderer
OpenGL ES 1.1 렌더러로 돌아갑니다.
응용 프로그램이 두 가지 다른 렌더링 클래스를 갖는 이유는 OpenGL ES 1.1과 2.0에 서로 다른 호환되지 않는 렌더링 파이프 라인이 있기 때문입니다. OpenGL ES 2.0을 사용하면 멋진 효과를 내기 위해 프로그래밍 가능한 셰이더를 만들 수 있지만 OpenGL ES 1.1보다 간단한 작업에 사용하기가 어려울 수 있습니다.
OpenGL ES 2.0을 사용하는 경우 iPhone 3G S 이상 장치에서만이 절대 API를 지원하므로 많은 사람들이 응용 프로그램에 대체 기능을 추가합니다. 그러나 iPad 전용 응용 프로그램을 개발하는 경우 2.0 지원이 있다고 가정 할 수 있습니다. 또한 Info.plist의 UIRequiredDeviceCapabilities
에 opengles-2
키를 추가하여이 기능이있는 기기에서 애플리케이션을 실행하도록 제한 할 수 있습니다.
최신 장치에서는 OpenGL ES 1.1을 사용할 수 있습니다. 따라서 2.0 렌더링 경로를 비활성화하려면 템플릿의 EAGLView에서 ES2Renderer
클래스를 무시하고 ES1Renderer
으로 작업하면됩니다. ES1Renderer
에서 OpenGL ES 코드를 가져 와서 EAGLView에 배치 할 수도 있습니다.
'템플릿이 ES2 컨텍스트를 만들려고 시도하고 실패 할 경우 ES1 컨텍스트를 만들려고합니다. '- 이전 장치에서는 작동하지 않는다는 의미입니까? 나는 모든 것을 두 번 쓸 필요가 있니? '모든 장치에서 지원되는 ES 1.1 만 사용하려면 템플릿 프로젝트에서 ES2에 대한 모든 참조를 삭제하면됩니다 .' Cool. 그 참조는 어디에 있습니까? 어떤 파일? – Moshe