使用OpenGL在Mac OSX El Capitan上渲染Glitch

时间:2015-10-14 02:14:30

标签: macos opengl sdl mac-app-store osx-elcapitan

我使用SDL 1.2 + OpenGL 1.1为OSX创建了一个网球游戏。

直到El Capitan,一切都还好。现在,一些纹理无法正确显示。

宫廷白线现在是黑色的;玩家纹理都很糟糕;左边的能量条都是黑色的: glitch#1

图标上的白线不正常。突出显示的图标上的彩虹纹理不是: glitch#2

glitch#

游戏通常看起来如何: How the game should normally looks

错误的纹理是:

  • 玩家:使用RGBA
  • 使用不同的纹理在游戏中重新创建它们
  • 白线(现在为黑色):正常的RGBA纹理
  • 能量条(左侧):正常RGBA纹理
  • 其他一些GUI元素,但不是全部:大多数是普通的RGBA纹理

此外,只有游戏的AppStore版本才会出现这些故障。 我从我的网站分发的版本似乎没有故障(=> http://www.managames.com/predownload_en.php?f=TennisElbowMac_sto.zip

我对发生的事情感到十分困惑。我知道El Capitan刚刚给操作系统呈现的方式带来了很大的改变,但我不知道在哪里看,甚至更少要修复。

它似乎只触及RGBA纹理,但不是全部,因为大多数GUI元素仍然正确显示。

提前感谢您提供的任何提示!

4 个答案:

答案 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,这似乎解决了这个问题(至少在几个我到目前为止测试过的游戏):

以下所有内容均来自命令提示符:

  1. 备份原始的ruby公式(以防万一):

    mv /usr/local/Library/Formula/sdl_image.rb /usr/local/Library/Formula/sdl_image_backup.rb

  2. 这将使用sdl版本1.2.10创建一个新的公式:

    brew create https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz

  3. 它应该在文本编辑器中自动打开,如果没有用vim / emacs / nano /你喜欢的任何东西打开它并编辑它以匹配原始sdl_image.rb(现在sdl_image_backup.rb)所说的大部分内容,但跳过&#34;瓶子&#34;部分和&#34;测试&#34;一部分。

  4. 设置环境变量(不确定这是必需的,但对我有用):

    export SDL_CONFIG = / usr / local / bin / sdl-config

  5. 取消旧版1.2.12安装的链接:

    brew unlink sdl_image

  6. 现在重新安装,但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。