Pregunta

La actualización a la SDK de iOS 4.2 que estoy experimentando varias malas conductas en mi solicitud (se le pide otra aquí ). El que yo voy a pedir su ayuda para las preocupaciones ventana OpenGL (una subclase EAGLView) que no más hace que el modelo 3D que estoy poniendo en.

La vista se asigna y se parece reconocer los gestos, pero su contenido no es visible (He comprobado que se trata de la vista y no el colocación incorrecta de la modelo coloreando el fondo:. que no colorea a través glClearColor())

Cuando doble toque que será para cambiar el tamaño (que va a pantalla completa, antes de que esto es un poco UIView) llamar a este método:

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

y mágicamente aparece el modelo , e incluso el fondo se colorea.

Tengo un método que cambia el tamaño y lo hago de nuevo a su posición de cuadro y el centro anterior y cuando se llama a la vista se convierte en 'vaciar' de nuevo.

Antes de ¿Cualquier sugerencia? (Puedo publicar más de código si es necesario)

Actualizar Esto está sucediendo en el simulador (no se puede probar en un dispositivo en el momento). Si se trata de un fallo reconocido, tiene una referencia cualquiera de los documentos del Apple?

ACTUALIZACIÓN 2 Estoy usando OpenGL ES 1.1 y no 2.0.

Esto es lo que hago en layoutSubViews de EAGLView:

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

Y este es mi 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;
}

ACTUALIZACIÓN 3

Si creo la vista dándole el marco de pantalla completa (320x480) Parece procesa de forma correcta. De alguna manera se relaciona con las dimensiones de vista

¿Fue útil?

Solución

Me llevó siglos para encontrar esto. No está bien documentado en absoluto, pero es en la documentación de manzana. En OS 4.2 y superior, lo que necesita el tamaño EAGLview ser un múltiplo de 32 píxeles en ambas dimensiones para que funcione.

Otros consejos

¿Es esto en el simulador? Si es así, entonces eso es un error conocido en el simulador de iOS 4.2. Este error no afecta a los propios dispositivos.

¿Cómo está configurando su capa de OpenGL-hosting y la opinión de que respalda? Cuando trato de las aplicaciones de ejemplo OpenGL ES que tengo aquí y aquí , ambos funcionan muy bien en el simulador de 4.2, así como el dispositivo.

Tal vez usted podría comparar la inicialización utilizado en aquellos ejemplos con su cuenta y ver si hay algo que usted puede ser que falte en el proceso de configuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top