Почему мой EAGLVIew больше не рендерится в iOS 4.2? - PullRequest
3 голосов
/ 24 ноября 2010

Обновление до 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).В некотором роде это связано с размерами вида

Ответы [ 3 ]

13 голосов
/ 29 ноября 2010

Мне понадобилось вечно, чтобы это выяснить. Не совсем хорошо документировано, но это в документах Apple. На OS 4.2 и выше вам нужно, чтобы размер EAGLview был кратным 32 пикселям в обоих измерениях, чтобы он работал.

2 голосов
/ 24 ноября 2010

Это в симуляторе?Если это так, то это известная ошибка в симуляторе iOS 4.2.Эта ошибка не влияет на сами устройства.

1 голос
/ 25 ноября 2010

Как вы настраиваете свой слой OpenGL-хостинга и поддерживает его?Когда я пробую примеры приложений OpenGL ES, которые у меня есть здесь и здесь , оба прекрасно работают на Симуляторе 4.2, а также на устройстве.

Возможно, вымог бы сравнить инициализацию, использованную в этих примерах, с вашей и посмотреть, есть ли что-то, чего вам может не хватать в процессе установки.

...