Question

Mise à niveau vers iOS SDK 4.2 Je rencontre plusieurs misbehaviors dans ma demande (l'autre est demandé ici ). Celui que je vais demander votre aide pour les préoccupations d'une vue OpenGL (une sous-classe de EAGLView) qui rend plus le modèle 3d je suis en train dans.

Le point de vue est attribué et il semble reconnaître les gestes, mais son contenu ne sont pas visible (je l'ai vérifié qu'il est sur le point de vue et non mauvais placement de la modèle en colorant le fond. il ne colore pas par elle glClearColor())

Quand je appuyez deux fois il doit redimensionner (il va en plein écran, avant cela, il est un peu UIView) appelant cette méthode:

- (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];
}

et comme par magie le modèle apparaît , et même se colore l'arrière-plan.

J'ai une méthode qui redimensionne et le faire revenir à sa position précédente cadre et le centre et quand il est appelé la vue devient « vide » à nouveau.

Avant Toute suggestion? (Je peux poster plus de code si nécessaire)

UPDATE Ce qui se passe sur le simulateur (ne peut pas tester sur un appareil au moment). Si cela est un bug reconnu, quelqu'un at-il une référence de docs Apple?

MISE À JOUR 2 J'utilise OpenGL ES 1.1 et non 2.0.

Voici ce que je fais dans le layoutSubViews de EAGLView:

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

Et voici ma 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;
}

Mettre à Jour 3

Si je crée la vue en lui donnant le cadre plein écran (320x480) Il apparaît rendu correctement. D'une certaine façon, il est lié aux dimensions de vue

Était-ce utile?

La solution

Il m'a fallu une éternité pour trouver cela. Pas bien documenté du tout, mais il est dans la documentation de la pomme. Sur os 4.2 et supérieur, vous avez besoin de la taille EAGLview être un multiple de 32 pixels dans les deux dimensions pour que cela fonctionne.

Autres conseils

Est-ce dans le simulateur? Si oui, alors c'est un bug connu dans le iOS 4.2 Simulator. Ce bug n'a pas d'impact les appareils eux-mêmes.

Comment vous configurez votre couche d'hébergement OpenGL et la vue qu'elle soutient? Lorsque je tente les exemples d'applications OpenGL ES que je et ici , les deux fonctionnent très bien sur le 4.2 Simulator, ainsi que le dispositif.

Peut-être que vous pouvez comparer l'initialisation utilisée dans ces exemples avec votre propre et voir s'il y a quelque chose que vous pourriez manquer dans le processus d'installation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top