我使用SDL 1.2 + OpenGL 1.1为OSX创建了一个网球游戏。
直到El Capitan,一切都还好。现在,一些纹理无法正确显示。
宫廷白线现在是黑色的;玩家纹理都很糟糕;左边的能量条都是黑色的:
错误的纹理是:
此外,只有游戏的AppStore版本才会出现这些故障。 我从我的网站分发的版本似乎没有故障(=> http://www.managames.com/predownload_en.php?f=TennisElbowMac_sto.zip)
我对发生的事情感到十分困惑。我知道El Capitan刚刚给操作系统呈现的方式带来了很大的改变,但我不知道在哪里看,甚至更少要修复。
它似乎只触及RGBA纹理,但不是全部,因为大多数GUI元素仍然正确显示。
提前感谢您提供的任何提示!
答案 0 :(得分:1)
我的软件图形问题也一样。我正在使用SDL 1.2和SDL_image 1.2.12。我试图改变我用SDL_image加载的图像格式 SDL_Surface * const surface = IMG_Load(filename);
但没有任何效果。最后,作为一个快速修复,我将我的图形更改为BMP(灾难)并使用纯SDL功能加载它们:
SDL_Surface * const surface = SDL_LoadBMP(filename);
之后我再也没有毛刺了。 这不是最终的解决方案,特别是如果你有很多图形。
答案 1 :(得分:1)
感谢Sidney Markowitz的帮助,来自这个主题=> https://lists.gnu.org/archive/html/enigma-devel/2015-10/msg00001.html,我找到了一个解决方案:用1.2.10版本替换SDL_Image 1.2.12版本。
如果我做对了,那么问题就是1.2.10带有旧的通用代码,这是AppStore上不允许的,所以提交这个版本的应用程序可能会以拒绝结束。因此,我将尝试仅使用x86代码重新编译它,这应该可以解决问题。
修改强>
我没有重新编译,而是使用了Lipo(http://www.manpages.info/macosx/lipo.1.html),就像这样:
lipo -remove ppc -output~ / Documents / SDL_image /Library/Frameworks/SDL_image.framework/Versions/A/SDL_image
然后将“〜/ Documents / SDL_image”移回“/Library/Frameworks/SDL_image.framework/Versions/A/”。最后我编辑了它的info.plist来修复Bundle ID(需要2个点),这样在AppStore上发布就可以了。
再次感谢Sidney Markowitz对Lipo的暗示! : - )
<强> EDIT2:强>
新版本已被Apple拒绝,因为SDL_image 1.2.10使用了弃用的CGDataProviderCreate API。该代码包含一个“#ifdef”以使用更新的替代品,因此我将不得不重新编译它而不是使用Lipo,但我担心这个更新的更换是OSX El Capitan上毛刺的实际来源。
<强> EDIT3:强>
重新编译SDL_image 1.2.10有效,但不是这样,我不得不将安装文件夹更改为@rpath和其他一些参数,然后在AppStore上成功接受。
答案 2 :(得分:0)
对于OS X El Capitan和pygame上出现图形故障问题的其他人,您可以按照这些说明从版本1.2.12降级到SDL到1.2.10,这似乎解决了这个问题(至少在几个我到目前为止测试过的游戏):
以下所有内容均来自命令提示符:
备份原始的ruby公式(以防万一):
mv /usr/local/Library/Formula/sdl_image.rb /usr/local/Library/Formula/sdl_image_backup.rb
这将使用sdl版本1.2.10创建一个新的公式:
brew create https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz
它应该在文本编辑器中自动打开,如果没有用vim / emacs / nano /你喜欢的任何东西打开它并编辑它以匹配原始sdl_image.rb(现在sdl_image_backup.rb)所说的大部分内容,但跳过&#34;瓶子&#34;部分和&#34;测试&#34;一部分。
设置环境变量(不确定这是必需的,但对我有用):
export SDL_CONFIG = / usr / local / bin / sdl-config
取消旧版1.2.12安装的链接:
brew unlink sdl_image
现在重新安装,但brew将使用我们新的1.2.10公式:
brew install sdl_image
答案 3 :(得分:0)
saltycraig的答案对我有用,但我必须自己想出一些事情,我认为我会把它包括在内,所以人们不必费力去弄明白。
首先,当您在步骤3中更改新的sdl_image.rb以匹配备份时,请务必保留新的网址,其中包含以下地址:&#34; https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz &#34 ;.这看起来似乎很明显,但直到我第二次或第三次看过来,我都没有弄明白。
其次,即使在取消链接sdl_image并安装1.2.10之后,您可能还需要删除1.2.12。对我来说,它是在usr / local / Cellar / sdl_image,因为我酿造python来绕过El Capitan的新SIP阻止我安装pygame。