2015-07-20 92 views
0

我在Google和這裏搜索了對此的答案。我發現了類似的問題,但不是這個問題,也沒有答案。我也是xCode和Apple開發人員的新手,在蘋果開發人員離開後我繼承了這個項目。renderbufferStorage在iPad AIR上失敗,但在iPad上沒有Retina gen 4

這是使用cocos2d v0.99.4-rc3,iOS 8.3,Xcode 6.3.2。此外,這適用於iOS 7.1,並在我升級xCode之前。我同時在iPad上升級了xCode和iOS。

在下面的代碼中,backingWidth_和backingHeight_在iPad Retina上設置爲1536和2048,但在iPad AIR上設置爲0。

當我在執行renderbufferStorage之後調用glGetError()時,在AIR上返回0x0501(GL_INVALID_VALUE),但在Retina上返回0x0000,所以我認爲在將'layer'傳遞給它時renderbufferStorage存在問題爲AIR。 glBindRenderbufferOES()執行後調用glGetError()將爲AIR和Retina返回0x0000。我在Build Settings中列出了有效架構的arm64,armv7和armv7;但只有armv7和arm64顯示在顯示架構的第一行中,正好位於Base SDK上方。

- (BOOL)resizeFromLayer:(CAEAGLLayer *)layer 
{ 
    // Allocate color buffer backing based on the current layer size 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_); 
    [context_ renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:layer]; //This is fine on iPad Retina but causes error for AIR 
    GLenum_error = glGetError(); //this returns 0x0501 (GL_INVALID_VALUE)on the iPad AIR, but 0x0000 on the Retina. 

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth_); //equals 1536 on Retina, 0 on AIR 
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight_); //equals 2048 on Retina, 0 on AIR 

    if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) //this fails, so the resizeFromLayer returns NO. 
{ 
    NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); 
    return NO; 
} 

resizeFromLayer從layoutSubviews稱爲()

- (void) layoutSubviews 
{ 
    [renderer_ resizeFromLayer:(CAEAGLLayer*)self.layer]; 
    size_ = [renderer_ backingSize]; 

    // Avoid flicker. Issue #350 
    [[CCDirector sharedDirector] drawScene]; 
} 

任何人都經歷這一點,你是怎麼改正它。這裏討論的一個條目是在銷燬黑屏時銷燬幀緩衝區,然後在resizeFromLayer內部創建一個新的幀緩衝區,但這不是特定於AIR的。我還沒有嘗試過,但是如果它有效,我會將其作爲可能的解決方案發布。關於該解決方案的一些評論表示,它掩蓋了真正的潛在問題,這就是我問這個問題的原因。

應用程序代碼在Retina和AIR上都成功構建,但在iPad和模擬器中,AIR明顯顯示黑屏,因爲調整大小時失敗。

+0

我試圖拆除framebuffer並在resizeFromLayer中創建一個新的,我得到了相同的行爲,所以沒有奏效。 – michill

+0

我也確定在resizeFromLayer中,圖層對於iPad Retina具有rasterizationScale = contentScale == 2,但兩者對於iPad AIR均等於1536。 – michill

回答

0

由於沒有人回覆,我花了一段時間才弄清楚這一點,尤其是因爲我是xCode,iOS和cocos2d的新手。這個問題原來是使用舊版Cocos2d版本的64位/ 32位問題。座標偏移量計算錯誤,圖像大小返回爲0.如果Cocos2d已升級到較新版本,則可能不會出現浮點/雙線不匹配。