2010-05-10 2 views
0

저는 최근에 그물을 파고 들었습니다. 일부 비디오 자습서에서는 하나의 OpenGL ES 컨텍스트가 포함 된 이전 템플릿 (프리 SDK 3.2)을 보여줍니다. 이제는 두 가지가 있습니다. 두 가지 버전의 OpenGL ES가 최신 iMobile 장치에서 사용 가능합니다.iPhone은 1.1과 2.0 사이에서 사용할 OpenGL ES 컨텍스트를 어떻게 알 수 있습니까?

이전 버전을 사용하거나 모든 것을 두 번해야합니까? 이전 컨텍스트를 사용하도록 iPhone에 지시하거나 어떻게 자동으로 그렇게할까요?

답변

0

기본적으로 템플릿은 ES2 컨텍스트를 만들려고 시도하고 실패 할 경우 ES1 컨텍스트를 만들려고합니다. 모든 장치에서 지원되는 ES 1.1 만 사용하려면 템플릿 프로젝트에서 ES2에 대한 모든 참조를 삭제하면됩니다.

+0

'템플릿이 ES2 컨텍스트를 만들려고 시도하고 실패 할 경우 ES1 컨텍스트를 만들려고합니다. '- 이전 장치에서는 작동하지 않는다는 의미입니까? 나는 모든 것을 두 번 쓸 필요가 있니? '모든 장치에서 지원되는 ES 1.1 만 사용하려면 템플릿 프로젝트에서 ES2에 대한 모든 참조를 삭제하면됩니다 .' Cool. 그 참조는 어디에 있습니까? 어떤 파일? – Moshe

4

Frogblast가 말한 것을 확장하면 템플릿 코드는 ES1RendererES2Renderer의 두 클래스를 정의합니다. 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의 UIRequiredDeviceCapabilitiesopengles-2 키를 추가하여이 기능이있는 기기에서 애플리케이션을 실행하도록 제한 할 수 있습니다.

최신 장치에서는 OpenGL ES 1.1을 사용할 수 있습니다. 따라서 2.0 렌더링 경로를 비활성화하려면 템플릿의 EAGLView에서 ES2Renderer 클래스를 무시하고 ES1Renderer으로 작업하면됩니다. ES1Renderer에서 OpenGL ES 코드를 가져 와서 EAGLView에 배치 할 수도 있습니다.

+0

코드를 이동하지 않고 EAGL1을 강제로로드 할 수 있습니까? – Moshe

+1

@Moshe - 템플릿에서 OpenGL ES 2.0 파이프 라인을 사용하지 못하게하려면 'renderer = [[ES2Renderer alloc] init]; 행을 주석 처리하십시오. 코드는 OpenGL ES 1.1 렌더러로 대체됩니다. –

+0

설명해 주셔서 감사합니다. – Moshe

관련 문제