我在 iPad 上使用 OpenGL 纹理并在设备上得到可怕的伪影,而模拟器显示一切完美而流畅。我相信 iPhone 会显示相同的伪像。
如果我查看标题,我会看到一旦我包含了 OpenGLES/ES2/gl.h,并且在另一个文件 OpenGLES/ES1/*.h 中。这会是个问题吗?
或者设备上出现伪影的原因可能是什么?
模拟器:
真实设备:
如果您使用的是 ES 2.0,那么第一个猜测是您遇到了精度问题。highp、mediump 和 lowp GLSL 精度说明符是提示,而不是绝对命令,因为它们指定了所需的最低精度。很可能模拟器给你的精度比你明确要求的更高,但设备没有。
如果您对此不科学,请尝试将所有内容都设置为 highp 作为测试,然后慢慢拨回并根据经验检查结果。
可能是 XCode 在编译期间应用的 PNG 优化(尝试将其关闭);请参阅如何跳过压缩一个 PNG?
虽然您可以在项目设置中使用“压缩 PNG 文件”完全关闭 PNG 优化/压缩(仅当项目的 Base SDK 设置为设备 SDK,而不是模拟器 SDK 时才可见),但您不想这样做!阅读上面的链接了解原因的详细信息,但其要点是优化让 iPhone 跳过了一些减慢 PNG 显示速度的数学运算。
Xcode 只会优化它知道的 PNG 图像文件。为了防止特定的 PNG 被优化,你改变它的文件类型,这样 Xcode 就不再知道它是一个 PNG。
- 在项目窗口中选择文件。
- 选择文件->获取信息。
- 在常规选项卡上,将文件类型从 image.png 更改为文件。