更新到iOS 7.1后,OpenGL ES sprite不再呈现

时间:2014-03-31 04:58:23

标签: iphone opengl-es opengl-es-2.0 ios7.1

我正在使用基于本教程的简单2D精灵类来向屏幕呈现PNG位图:

http://www.raywenderlich.com/9743/how-to-create-a-simple-2d-iphone-game-with-opengl-es-2-0-and-glkit-part-1

运行iOS 6.1的iPhone 4S和运行iOS 7的iPhone 5S都运行良好。由于我更新到iOS 7.1,并且我的MacBook Air更新为Mavericks和XCode 5.1,精灵不再出现在屏幕上(I只是得到一个空的白色屏幕,这是我清除背景的颜色)。当我使用XCode 5.1构建应用程序并再次在我的iPhone 4S上运行时,它仍然有效。

有谁知道造成这种情况的原因是什么?有没有人遇到过这个问题?由于我对OpenGL ES缺乏了解,我无法找到问题的根源。 :)我的sprite类与教程中的精灵类完全相同。

如果需要更多详细信息/代码段,请与我们联系。

1 个答案:

答案 0 :(得分:0)

我甚至不会查看示例代码,因为它听起来不像您当前的代码。 (你说'基于'。)但我会告诉你如何找到你的问题。

首先,清除白色以外的东西(如红色)作为测试。

如果屏幕变为红色,您至少知道您的视图和上下文以及开放gl一般都在工作。这可能会导致许多可能的罪魁祸首。

第二..使用调试工具,很可能会让你正确解决问题。你必须在系留设备上运行而不是sim。运行你的应用......

opengl analyze screen

在调试导航器中单击FPS。然后点击分析并耐心等待。这将是一个快照在开放gl中发生的一帧快照。它必须做一堆事情来实现这一点,它需要大约30秒。但是接下来你会有一个交互式的东西向你显示框架,并让你逐步完成进程,看看是什么代码发生了什么,以及绘制每个元素时的框架。实际上它非常酷。并且它可能会显示一条错误消息(红色)。

我的猜测是它不再加载你的精灵图像。可能在6到7之间或Xcode或OSX的版本之间发生了变化。在这种情况下,屏幕是空白的,因为它们没有加载,因此没有被绘制。

编辑: 我认为分析将有助于找到您的问题。但是为了提供更多的可能性,根据我的经验,当没有任何东西可以绘制时,它通常是这些东西之一:

  1. 整体OpenGL问题 - 将您的清晰颜色设置为红色或蓝色以进行测试。
  2. Shader没有编译 - 总是输出着色器编译错误,所以你知道。
  3. Bad Shader数学或逻辑 - 使用gl_FragColor = vec4(0.0,0.0,1.0,1.0)或一些对比颜色来测试。你能看到你的结构吗?
  4. 程序未获取属性。你还记得glEnableVertexAttribArray
  5. 吗?
  6. 程序没有统一。使用上面的Analyze功能检查统一值,以确保它们已成为着色器。
  7. (如果我想到的话,我会添加更多)

    当事情发生时