OpenGL ES 1.1 iPhone5+ IOS 8 Black Screen



最近,我决定再次开始一个游戏开发项目,该项目几年前开始提交iOS App Store。我发现我的应用程序在iPhone5s上显示了一个黑屏,即使运行还不错,我的应用程序也会显示。我有一个iPhone 3GS,并且在iPhone 4s上也进行了测试,并且可以正常工作。

这里有一个线程,有人遇到了类似的问题,说iPhone的后期版本与OpenGles 1.1兼容,这只是他的代码中的错误。但是实际的线程并未指定他如何解决。资料来源:类似的堆栈溢出线程

我知道,所有版本的iPhone都应该与OpenGles 1.1兼容,但是新手机似乎有所改变。(也许这与金属有关?我在研究中注意到他们在iPhone 5s和以后的版本上实现了金属。)

我已经在这个主题上搜索了一段时间,找不到任何东西,也许最好将我的项目移植到OpenGles 2?有人知道这个怪异的iPhone版本错误吗?

当您告诉OpenGL您正在提供GL_FLOAT数据时,它会期望GLfloat数据。GLfloatfloat的打字。

CGFloat是32位设备上的float的打字和64位设备上的double

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

顺便说一句,这是Apple现在提供GLKVector2 et Seq的部分原因。您应该使用它,如果您需要便利,它的功能和所有其余的Glkit。

这是OpenGL(不是特定版本)的问题,对64位设备: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};
}

我在代码中使用此而不是CGPONT来解决此问题。该代码在使用顶点在64位设备上渲染时将正确端口。

相关内容

  • 没有找到相关文章

最新更新