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) 올바르게 렌더링 된 것으로 보입니다. 어떤면에서 그것은 뷰 치수와 관련이 있습니다
그것은 당신이 옳은 마이크 인 것처럼 보입니다. 32의 배수로 올바르게 렌더링됩니다. 문서에서 어디에 쓰여 있습니까? – rano
이 문서에서는 'PowerVR SGX 릴리즈 노트 및 모범 사례'단락 – rano
의 http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESPlatforms/OpenGLESPlatforms.html이라고합니다. iPhone 5의 화면 높이가 1136이고, 32로 나눈 값이 35.5 ... –