【问题标题】:Compiling library with optimizations breaks graphics使用优化编译库会破坏图形
【发布时间】:2011-05-30 12:20:14
【问题描述】:

我有一个用于从 iPhone 移植到 Android 的游戏的本机库。我们的目标操作系统版本是 1.6,游戏整体运行良好,没有任何优化。但是,当我启用任何类型的优化(无论是 -O1、-O2 或 -O3)时,除了图形之外的所有内容(输入、图形、声音、游戏代码)都可以正常工作。

这是我应该得到的:

http://i56.tinypic.com/2yzn4o6.png

我得到了什么:

http://i51.tinypic.com/raqogl.png

我已经尝试在 NDK 邮件列表上获得一些帮助,但没有得到任何回复。我什至尝试将纹理发送为纯白色,但它们的行为更加奇怪,在加载屏幕中微小的白色三角形“下落”直到整个屏幕变成白色,而我只绘制了几个三角形。

我正在使用 vs-android 编译,但即使使用 NDK-build 我也有同样的问题。我还验证了我从纹理中获得的像素数据是 100% 有效的(我在调试时将其转储到 SD 卡上的 PNG)。

感谢任何帮助。

【问题讨论】:

  • 我认为您将不得不将其缩小到一个特定的代码块,该代码块会因优化而中断,然后其他人才能真正帮助您。如果您在最近的 NDK 中使用 GCC 4.4.x,您可以在源文件中改变优化以缩小范围:gcc.gnu.org/onlinedocs/gcc/…
  • 根据同事给我的一些建议,我对所有文件启用了优化,同时对可能导致问题的任何可疑文件禁用了优化。所以我在我的纹理处理文件上这样做了,经过测试解决了这个问题。

标签: android graphics opengl-es android-ndk corruption


【解决方案1】:

显然,某些编译器可能会错误地优化您的文件并导致这些图形错误。如果您有某种在其他平台上不会发生的错误,例如在我的情况下,这个 OpenGL 错误,您可以在 Android 上解决它,如果您首先禁用所有文件的优化,然后按顺序重新启用它们,直到您会找到对您的错误负责的源文件。在我的例子中,它是一个 OpenGL 纹理文件,不知何故被错误地编译了。

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 2011-04-13
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多