Iphone 更新到iOS 7.1后,OpenGL ES精灵不再渲染

Iphone 更新到iOS 7.1后,OpenGL ES精灵不再渲染,iphone,opengl-es,opengl-es-2.0,ios7.1,Iphone,Opengl Es,Opengl Es 2.0,Ios7.1,基于本教程,我使用一个简单的2D sprite类将PNG位图渲染到屏幕上: 在运行iOS 6.1的iPhone4S和运行iOS 7的iPhone5S上,一切正常。自从我升级到iOS 7.1,MacBook Air升级到Mavericks和XCode 5.1之后,精灵不再出现在屏幕上(我只是得到一个空白的白色屏幕,这是我清除背景的颜色)。当我使用XCode 5.1构建应用程序并再次在iPhone4S上运行时,它仍然可以工作 有人知道这是什么原因吗?有人碰到过这个问题吗?我很难找到问题的根源,因为

基于本教程,我使用一个简单的2D sprite类将PNG位图渲染到屏幕上:

在运行iOS 6.1的iPhone4S和运行iOS 7的iPhone5S上,一切正常。自从我升级到iOS 7.1,MacBook Air升级到Mavericks和XCode 5.1之后,精灵不再出现在屏幕上(我只是得到一个空白的白色屏幕,这是我清除背景的颜色)。当我使用XCode 5.1构建应用程序并再次在iPhone4S上运行时,它仍然可以工作

有人知道这是什么原因吗?有人碰到过这个问题吗?我很难找到问题的根源,因为我不了解OpenGL ES以及其他方面的知识。:)我的sprite类与教程中的类完全相同


如果需要更多详细信息/代码片段,请告诉我。

我甚至不打算看示例代码,因为它听起来与您当前的代码不一样。(你说‘基于’)但我会告诉你如何找到你的问题

首先,清除除白色(如红色)以外的其他颜色作为测试

如果屏幕变为红色,您至少知道您的视图和上下文以及OpenGL总体上正常工作。这击倒了许多可能的罪犯

第二。。使用调试工具,它很可能会让您正确地解决问题。不过,你必须在栓系设备上运行,而不是sim卡。运行你的应用程序

在调试导航器中单击FPS。然后单击分析并耐心等待。它将对OpenGL中发生的事情进行一帧快照。它需要做很多事情来实现这一点,大约需要30秒。然后你会看到一个互动的东西,它会向你展示框架,让你一步一步地完成过程,看看是什么代码让它发生了,以及框架在绘制每个元素时。事实上它非常酷。它可能会向您显示一条错误消息(红色)

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

编辑: 我认为分析将有助于发现你的问题。但要提供更多的可能性,根据我的经验,当什么都没有画出来时,通常是这样的:

  • OpenGL的一个整体问题-将您的透明颜色设置为红色或蓝色以进行测试
  • 着色器未编译-始终输出着色器编译错误,让您知道
  • 糟糕的着色器数学或逻辑-使用
    gl_FragColor=vec4(0.0,0.0,1.0,1.0)
    或一些对比色进行测试。你能看到你的结构吗
  • 程序没有获取属性。你还记得GlenableVertexAttributeArray
  • 程序没有得到制服。使用上面的“分析”功能检查均匀值,以确保它们与着色器匹配
  • (如果我想到它们,我会补充更多)


    当事情发生时

    非常感谢您的回复!我试着用白色以外的东西来清除背景,但它确实出现了,所以至少被消除了。我将尝试使用您描述的调试工具。我希望它像不加载图像一样简单。再次感谢!我已经为不画画的东西浪费了好几天。。这通常是三件或四件事情中的一件。。我将更新我的答案以包含最常见的代码。我将阅读Erik M.Buck关于OpenGL ES的书,以便更好地掌握我正在使用的代码。我注意到我从教程中获取的Sprite类没有调用glGenBuffers和glBindBuffer。。。这可能是原因吗?我不知道它以前是如何工作的(比如在iOS 7或更早版本上)。我会继续调查并在这里报告。顺便说一句,他书(第3章)中的纹理三角形示例在iOS 7.1上的iPhone 5S上运行良好。。。所以我相信我很快就会找到解决办法。