2010-11-24 4 views
3

iOS SDK로 업그레이드 4.2 응용 프로그램에 여러 가지 오해가 발생했습니다 (다른 하나는 here로 질문 함). 내가 도움을 요청할 것은 OpenGL 뷰 (EAGLView 서브 클래스)로, 더 이상 3D 모델을 렌더링하지 않습니다.왜 내 EAGLVIew는 iOS 4.2에서 더 이상 렌더링되지 않습니까?

보기가 할당되어 제스처는 인식하지만 그 내용은 보이는 것으로 보입니다. 이 보이지 않습니다. 입니다. (배경에 착색하여 모델의 위치를 잘못 지정하지 않았 음을 확인했습니다 : glClearColor()을 통해 색상이 지정되지 않음). 나는 그것이 크기를 조정하여야을 눌러 두 배로 때이 메서드를 호출

(이 조금있는 UIView되기 전에 그것은, 전체 화면 이동) :

- (void)animateToGrow{ 
    DNSLog(@"grow"); 
    grow = YES; 
    oldFrame = self.frame; 
    oldCenter = self.center; 

    [UIView beginAnimations:@"MoveAndStrech" context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    self.frame = CGRectMake(0, 0, WIDTH, HEIGHT); 
    self.center = CGPointMake(CENTER_X, CENTER_Y); 
    [UIView commitAnimations]; 
    [self setupGLPerspectiveNear:0.1 far:1000]; 
} 

마술 모델이을 표시, 심지어 배경 색깔됩니다 .

크기를 조정하여 이전 프레임과 중앙 위치로 되돌려주는 메서드가 있는데, 호출되면 'empty'가 다시이됩니다.

보다 먼저 제안 하시겠습니까? (필요한 경우 더 많은 코드를 게시 할 수 있습니다.)

업데이트 이것은 현재 시뮬레이터에서 발생하고 있습니다 (지금은 장치에서 테스트 할 수 없음). 이것이 인정 된 버그 일 경우, 누구든지 Apple docs에서 참조 할 수 있습니까?

업데이트 2 저는 2.0이 아닌 OpenGL ES 1.1을 사용하고 있습니다. 내가 EAGLView의 layoutSubViews에 무엇을 여기

은 다음과 같습니다

- (void)layoutSubviews 
{ 
    [EAGLContext setCurrentContext:_context]; 
    [self destroyFramebuffer]; 
    [self createFramebuffer]; 
    [self drawView]; 
} 

을 그리고 난 그것을 전체 화면 프레임을 제공하는 뷰를 작성하는 경우이 내 createFramebuffer

- (BOOL)createFramebuffer 
{ 
    glGenFramebuffersOES(1, &_viewFramebuffer); 
    glGenRenderbuffersOES(1, &_viewRenderbuffer); 

    glBindFramebufferOES(GL_FRAMEBUFFER_OES, _viewFramebuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, _viewRenderbuffer); 
    [_context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, _viewRenderbuffer); 

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &_backingWidth); 
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &_backingHeight); 

    if (_useDepthBuffer) 
    { 
     glGenRenderbuffersOES(1, &_depthRenderbuffer); 
     glBindRenderbufferOES(GL_RENDERBUFFER_OES, _depthRenderbuffer); 
     glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, _backingWidth, _backingHeight); 
     glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, _depthRenderbuffer); 
    } 

    if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) 
    { 
     NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); 
     return NO; 
    } 

    return YES; 
} 

UPDATE 3

입니다 (320x480) 올바르게 렌더링 된 것으로 보입니다. 어떤면에서 그것은 뷰 치수와 관련이 있습니다

답변

13

나를 찾는 데 영원히 걸렸습니다. 잘 문서화되지는 않았지만 사과 문서에 있습니다. 4.2 이상인 경우 EAGLview 크기가 작동하려면 두 차원 모두에서 32 픽셀의 배수가되어야합니다.

+0

그것은 당신이 옳은 마이크 인 것처럼 보입니다. 32의 배수로 올바르게 렌더링됩니다. 문서에서 어디에 쓰여 있습니까? – rano

+2

이 문서에서는 'PowerVR SGX 릴리즈 노트 및 모범 사례'단락 – rano

+0

의 http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESPlatforms/OpenGLESPlatforms.html이라고합니다. iPhone 5의 화면 높이가 1136이고, 32로 나눈 값이 35.5 ... –

2

시뮬레이터에서이게 있습니까? 그렇다면 iOS 4.2 시뮬레이터의 알려진 버그입니다. 이 버그는 장치 자체에 영향을주지 않습니다.

+0

젠장 실제 장치 atm에서 테스트 할 수 없습니다.이 버그가 어디에서 기록 되었습니까? – rano

+0

누구든지이 버그에 대한 문서를 찾았습니까? – Daniel

+0

iOS4.2를 사용하는 경우 장치에 영향을 미치지 만 EAGLView가 전혀 표시되지 않습니다. (적어도 나를 위해) – Daniel

1

OpenGL 호스팅 계층과 그 배경으로 사용되는 뷰를 어떻게 설정하고 있습니까? 내가 herehere을 가지고있는 OpenGL ES 샘플 어플리케이션을 시도 할 때, 둘 다 4.2 시뮬레이터와 디바이스에서 잘 동작합니다.

아마도 이러한 예제에 사용 된 초기화를 자신의 것과 비교하여 설치 프로세스에서 누락 된 부분이 있는지 확인할 수 있습니다.

+0

큐브 코드와 EAGLView 구현을 비교해 보았습니다. 나는'layoutSubViews'에서 새로운 것들을 생성하기 전에 버퍼를 파괴하지만, 큐브 예제에서'layoutSubViews'에서 나중에'resizeFromLayer :'에서 하나만 생성됩니다. 만약 내가 파괴 선을 언급하면 ​​뷰가 렌더링되지 않게되어서 커지게된다. – rano

+0

아, 다른 점은 depthbuffer를 사용한다는 것입니다.하지만 중요하지 않습니다. – rano

+0

@rano - 이제는 여러분이 지적 했으니, 분자 응용 프로그램에서 OpenGL 호스팅 뷰의 크기를 재조정 할 때 비슷한 점이 있습니다 (http://www.sunsetlakesoftware.com/molecules에있는 소스, 다시 올 사이트를 얻을 수있는 경우).) 시뮬레이터에서 동일한 디스플레이 아티팩트가 표시됩니다. 장치에서 제대로 작동합니다. 나는 버그 보고서를 제출할 것이다. –