2014-04-27 3 views
1

OpenGL ES 2.0에서 OpenGL ES 3.0으로 작은 iPad 응용 프로그램을 마이그레이션하는 중입니다.GLKit OpenGL ES 3.0을 사용한 멀티 샘플링

self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; // Or 2 
self.drawableDepthFormat = GLKViewDrawableDepthFormatNone; 
self.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888; 
self.drawableMultisample = GLKViewDrawableMultisample4X; 
self.drawableStencilFormat = GLKViewDrawableStencilFormatNone; 
self.enableSetNeedsDisplay = YES; 
// ... gl code following 

-drawRect 방법은 다음과 같습니다 :

glClearColor(1, 1, 1, 1); 
glClear(GL_COLOR_BUFFER_BIT); 

[_currentProgram use]; // Use program 
glUniformMatrix4fv([_currentProgram getUniformLocation:@"modelViewProjectionMatrix"], 1, 0, modelViewProjectionMatrix.m); 

// ... 
if (isES3) { 
    glBindVertexArray(vertexArray); 
} 
else { 
    glBindVertexArrayOES(vertexArray); 
} 
glDrawArrays(GL_TRIANGLE_STRIP, 0, verticiesLength); 

I를 내가 사용하는 유일한 GLKit 기능은 비록 앱, 나는 내 모든 드로잉을 처리 할 수 ​​GLKView의 서브 클래스를 사용 아직 OpenGL ES 3.0 지원 장치가 없으므로 iOS 시뮬레이터에서 OpenGL ES 3.0 테스트가 모두 수행됩니다. OpenGL ES 2.0 테스트는 장치 및 시뮬레이터에서 수행됩니다.

예상대로 ES2에서 화면은 시작시 즉시 흰색으로 지워집니다 (-drawRect은 아직 호출되지 않고 아직 그려지 않음). 그러나 스왑을 ES3으로 만들면 컨텍스트가 성공적으로 생성되고 아무런 gl 호출도 실패하지만 아직 화면이 검은 색 화면으로 표시됩니다. 무엇이 잘못되었는지에 대한 낚시를하면서 멀티 샘플링을 제거하기로 결정했습니다.

self.drawableMultisample = GLKViewDrawableMultisampleNone; 

그리고 효과가있었습니다. iOS 시뮬레이터 (iPad, iPad Retina 및 iPad Retina (64 비트))에서 OpenGL ES 3.0을 사용하여 멀티 샘플링하는 GLKit에 대한 알려진 문제점이 있습니까? 내 노트북에는 다중 샘플링에 대처할 수있는 충분한 여유 공간이 있습니다.

+0

에뮬레이터에서 실행중인 iOS 버전은 무엇입니까? iOS 7.0.4와 함께 실제 iPad 미니 망막 하드웨어에서 동일한 동작 (멀티 샘플링이 활성화 된 경우 검은 화면)을 관찰하고 있습니다. 이것이 iOS의 최신 개정판에서 수정 된 버그인지 궁금합니다. – jkingyens

+0

다른 사람이이 문제를 선택했기 때문에 기쁩니다! 나는 그것이 7.1 (.0)이라고 생각한다. 나는 Xcode를 업데이트 한 이후로 7.1.1에 대한 문제가 여전히 존재 함을 재확인하지 못했습니다. – Ephemera

답변

0

OpenGL은 매우 비동기적인 API입니다. 예를 들어, glClear에 전화하면 호출이 반환 될 때 화면이 지워질 것으로 예상해서는 안됩니다. 프레임 렌더링이 끝난 후에 생성 한 렌더링 결과 만 안정적으로 볼 수 있으며 일반적으로 이중 버퍼 렌더링을 사용할 때 버퍼를 바꿔서 표시됩니다.

그래서 당신이 관찰하고있는 것이 가장 중요하지는 않습니다. 프레임의 끝에서 모든 것이 잘 보입니까? 그렇다면 우려 할 이유가 없습니다.

차이점은 멀티 샘플링을 사용하는 경우 다른 렌더링 프로세스에서 발생했을 가능성이 높습니다. 이 경우 렌더링은 먼저 고해상도 버퍼로 이동하고 프레임의 끝 부분에서 실제 프레임 버퍼로만 다운 샘플링됩니다.

+0

나는이 대답을 쓴 이후로 질문이 한두 번 바뀌 었다고 생각한다. 아직 목표에 도달했는지 확신 할 수 없습니다. 처음에는 포스터가 맑은 전화 바로 다음에 렌더링을보고 있었지만 지금은 소리가 달라 보였습니다. –

0

배포 할 때 일반> 배포 정보 메뉴에서 범용이 아닌 iPad가되도록 장치 유형을 선택하면 수정됩니다.