簡體   English   中英

OpenGL ES 1.1 iPhone5 + IOS 8黑屏

[英]OpenGL ES 1.1 iPhone5+ IOS 8 Black Screen

最近,我決定再次選擇幾年前開始並提交給iOS應用商店的游戲開發項目。 我發現我的應用程序可以正常運行,但在iPhone5s上顯示黑屏。 我有一部iPhone 3GS,並且已經在iPhone 4s上進行了測試,並且可以正常工作。

這里有個線程,有人遇到類似的問題,他說更高版本的iPhone向后兼容OpenGLES 1.1,那只是他代碼中的錯誤。 但是實際線程並沒有指定他如何解決它。 來源: 類似的堆棧溢出線程

我知道所有版本的iPhone都應該向后兼容OpenGLES 1.1,但是新手機似乎有所改變。 (也許與金屬有關?我在研究中注意到他們在iPhone 5s和更高版本上實現了金屬。)

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

事實證明,這是OpenGL(不是特定於版本)在64位設備(iPhone5s +)上更加嚴格的問題。 CGFloats確實可以在這些設備上工作(包括CGPoint,因為它們包含CGFloats。)請使用GLFloats,因為這是由OpenGL庫提供的,用於此確切目的。

因此,以我為例,我制作了一些結構來替換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位設備上進行渲染時,此代碼將正確移植。

當您告訴OpenGL您正在提供GL_FLOAT數據時,它會期望GLfloat數據。 GLfloatfloat的typedef。

CGFloat是32位設備上的float的typedef,在64位設備上是double

因此,問題是錯誤的假設,即GLfloatCGFloat是同一類型的不同名稱。 他們不是。

順便說一句,這就是為什么Apple現在提供GLKVector2及后續版本的部分原因。 如果需要方便,應該使用它,它的make函數以及GLKit的所有其余部分。

暫無
暫無

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

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