Обновление до iOS SDK 4.2 Я испытываю несколько ошибок в работе моего приложения (еще один запрос здесь ).Тот, который я собираюсь попросить вашей помощи, касается представления OpenGL (подкласс EAGLView), которое больше не отображает 3D-модель, которую я вставляю.
Представление выделено, и оно, кажется, распознает жесты, ноего содержимое не видимое (я проверил, что речь идет о представлении, а не о неправильном расположении модели путем окрашивания фона: он не окрашивает его до 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];
}
и магически модель появляется и даже фон становится цветным.
У меня есть метод, который изменяет его размер и возвращает его к предыдущему кадру и центру, и когда он вызывается, представление становится '' пустым 'еще раз.
До какого-либо предложения?(Я могу опубликовать больше кода, если это необходимо)
ОБНОВЛЕНИЕ Это происходит на симуляторе (не может проверить на устройстве в данный момент).Если это признанная ошибка, есть ли у кого-нибудь ссылка из Apple docs?
ОБНОВЛЕНИЕ 2 Я использую OpenGL ES 1.1, а не 2.0.
Вот что ясделать в 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;
}
ОБНОВЛЕНИЕ 3
Если я создаюПредставление дает полноэкранный кадр (320x480).В некотором роде это связано с размерами вида