簡體   English   中英

為什么我的EAGLVIew不再在iOS 4.2中渲染?

[英]Why is my EAGLVIew not rendering anymore in iOS 4.2?

升級到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文檔?

更新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)它似乎正確呈現。 在某種程度上,它與視圖尺寸有關

我花了很長時間才發現這一點。 根本沒有完整記錄,但它在蘋果文檔中。 在操作系統4.2和更高版本上,您需要EAGLview大小為兩個維度中32像素的倍數才能生效。

這是在模擬器中嗎? 如果是這樣,那么這是iOS 4.2模擬器中的一個已知錯誤。 此錯誤不會影響設備本身。

你是如何設置你的OpenGL托管層及其支持的視圖? 當我嘗試我在這里這里的OpenGL ES示例應用程序時,兩者都在4.2模擬器和設備上運行得很好。

也許您可以將這些示例中使用的初始化與您自己的初始化進行比較,並查看在設置過程中是否存在可能缺少的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM