OpenGL ES 1.1 iPhone5 + IOS 8黑屏

时间:2015-05-09 00:24:34

标签: ios objective-c iphone opengl-es-1.1

最近我决定再次选择我几年前开始提交到iOS应用商店的游戏开发项目。我发现我的应用程序在iPhone5s上显示黑屏,即使它运行正常。我有iPhone 3GS并且已经在iPhone 4s上进行了测试,它运行正常。

这里有一个帖子,其中有人有类似的问题,说iPhone的后期版本向后兼容OpenGLES 1.1,而且他的代码中只是错误。但实际的线程没有说明他是如何解决它的。资料来源:Similar Stack Overflow Thread

我知道iPhone的所有版本都应该与OpenGLES 1.1向后兼容,但似乎新手机已经发生了变化。 (也许它与金属有关?我在研究中注意到他们在iPhone 5s和更高版本上实现了金属。)

我一直在搜索这个主题并且找不到任何东西,也许将我的项目移植到OpenGLES 2会更好吗?有谁知道这个奇怪的iPhone版本的bug?

2 个答案:

答案 0 :(得分:1)

对于64位设备而言,OpenGL(不是特定于版本)的问题更加严格:iPhone5s +。 CGFloats可以在这些设备上运行(这包括CGPoints,因为它们包含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位设备上渲染时,此代码将正确移植。

答案 1 :(得分:1)

当您告诉OpenGL您提供GL_FLOAT数据时,它需要GLfloat个数据。 GLfloatfloat的typedef。

CGFloat是32位设备上的float和64位设备上的double的typedef。

因此,问题是假设GLfloatCGFloat是同一类型的不同名称。他们不是。

顺便说一下,这也是Apple现在提供GLKVector2 et seq的部分原因。如果你想要方便的话,你应该使用它,make函数和GLKit的所有其余部分。