2015-05-09 132 views
1

最近我決定再次選擇一個遊戲開發項目,我幾年前開始提交給iOS應用程序商店。我發現我的應用程序在iPhone5s上顯示黑屏,即使它運行正常。我有一臺iPhone 3GS,並且已經在iPhone 4上進行了測試,並且工作正常。OpenGL ES 1.1 iPhone5 + IOS 8黑屏

這裏有一個線程,有人有類似的問題,說iPhone的後續版本與OpenGLES 1.1向後兼容,而且這只是他的代碼中的錯誤。但實際的線程沒有指定他是如何解決它的。資料來源:Similar Stack Overflow Thread

我知道iPhone的所有版本都應該與OpenGLES 1.1向後兼容,但它似乎已經隨着新手機而改變。 (也許它與金屬有關?我在我的研究中注意到他們在iPhone 5s及更高版本上實施了金屬處理。)

我一直在尋找關於此主題的一段時間,但找不到任何東西,或許將我的項目移植到OpenGLES 2會更好嗎?有沒有人知道這個怪異的iPhone版本錯誤?

回答

1

當您告訴OpenGL您提供的數據爲GL_FLOAT時,它預計GLfloat數據。 GLfloatfloat的類型定義。

CGFloat是32位設備上的float和64位設備上的double的typedef。

所以這個問題是一個錯誤的假設,GLfloatCGFloat是同一類型的不同名稱。他們不是。

順便說一句,這是蘋果現在供應GLKVector2 et seq的部分原因。如果你想方便,你應該使用它,它的make功能和GLKit的其餘部分。

+0

我選擇這個答案作爲正確的答案,因爲它更容易使用提供的數據結構,而不是像我那樣自己做。 –

1

事實證明,OpenGL(而不是特定版本)在64位設備上要嚴格得多:iPhone5s +。 CGFloats可以在這些設備上工作(這包括CGPoints,因爲它們包含CGFloats。)使用GLFloats是因爲OpenGL庫爲此提供了GLFloats。

所以在我的情況下,我做了一些結構來取代CGFloats例如:

//structure to replace CG Point for 64-bit device compatability 
typedef struct { 
    GLfloat x; 
    GLfloat y; 
} GLPoint; 
//returns a GLPoint to replace CGPoint structure to support 64-bit devices 
static inline GLPoint GLPointMake(GLfloat x, GLfloat y) { 
    return (GLPoint) {x, y}; 
} 

我用這個代替CGPoints在我的代碼來解決這個問題。在使用頂點在64位設備上呈現時,此代碼將正確移植。

+1

作爲一個評論活動太長,所以我在一個單獨的答案擴大了這一點;希望它能增加對話。看看'GLKVector2',而不是寫自己的。 – Tommy