2015-10-14 105 views
3

我使用SDL 1.2 + OpenGL 1.1为OSX创建了一款网球游戏。使用OpenGL在Mac OSX El Capitan渲染毛刺

一切都很好,直到埃尔卡皮坦。现在,一些纹理显示不正确。

宫廷白线现在是黑色的;玩家的纹理都很糟糕;左侧的能量棒全部为黑色: glitch#1

图标上的白线不正常。突出显示的图标彩虹质地也不: glitch#2

glitch#

如何游戏应该正常的样子: How the game should normally looks

所以错误的纹理是:

  • 球员:他们在游戏中使用不同的纹理重新创建,使用RGBA
  • 白线(现在是bla CK):正常RGBA纹理
  • 能量棒(左):正常RGBA纹理
  • 一些其他的GUI元素,但不是全部:大多正常RGBA纹理

而且,这只是在AppStore版本的游戏中,得到这些毛刺。 我从我的网站发布的版本似乎没有问题(=>http://www.managames.com/predownload_en.php?f=TennisElbowMac_sto.zip

我对发生了什么事情感到完全不解。我知道Capitan刚刚在操作系统渲染方面带来了一个重大变化,但我不知道该在哪里寻找,甚至不知道要修复什么。

看起来它只是触及RGBA纹理,但并不是所有的GUI元素都能正确显示。

因此,先感谢您提供的任何提示!

回答

1

感谢Sidney Markowitz从这个线程=>https://lists.gnu.org/archive/html/enigma-devel/2015-10/msg00001.html的帮助下,我想出了一个解决方案:将SDL_Image 1.2.12版本替换为1.2.10版本。

如果我得到了这个正确的结论,那么1.2.10带有AppStore中不允许的旧通用代码,因此,提交此版本的应用程序可能会以拒绝方式结束。因此,我将尝试仅使用x86代码重新编译它,这应该可以做到这一点。

编辑:

而不是重新编译,我只是用脂微球载体(http://www.manpages.info/macosx/lipo.1.html),像这样:

脂-remove PPC -output〜/文档/ SDL_image /Library/Frameworks/SDL_image.framework /版本/ A/SDL_image

然后将“〜/ Documents/SDL_image”移回“/Library/Frameworks/SDL_image.framework/Versions/A/”。最后,我编辑了它的info.plist来修正Bundle ID(需要2个点),这样AppStore上的发布才有效。

再次感谢Sidney Markowitz提供的Lipo提示! :-)

EDIT2:

新版已经被苹果拒绝,因为SDL_image 1.2.10使用过时CGDataProviderCreate API。该代码包含一个“#ifdef”来使用更新的替换,所以我将不得不重新编译它,而不是使用Lipo,但恐怕这个更新的替换是OSX El Capitan上的小故障的实际来源。

EDIT3:

重新编译SDL_image 1.2.10的作品,而不是因为它,我不得不更改安装文件夹@rpath和其他一些参数,然后将其成功地在AppStore上接受。

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); 

之后,我没有毛刺了。 这不是最终的解决方案,特别是如果你有很多图形。

+0

感谢您的提示!我进一步搜索了一下,我发现这个游戏也有相同的问题=> https://lists.gnu.org/archive/html/enigma-devel/2015-10/msg00001.html。所以这很可能与SDL有关,可能是SDL Image。您可以使用SDL Image 1.2.10而不是1.2.12进行测试吗? – ManuTOO

0

对于在OS X El Capitan和pygame中出现图形故障问题的任何人,可以按照这些说明将版本1.2.12降级到SDL到1.2.10,这似乎解决了这个问题(至少在几个到目前为止,我测试的游戏):

所有以下是从命令提示符:

  1. 备份原来的红宝石式(以防万一):

    MV在/ usr/local/Library/Formula/sdl_image.rb/usr/local/Library/Formula/sdl_im age_backup.rb

  2. 这将创建使用SDL版本1.2.10,而不是一个新的公式:

    BREW创造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)所说的内容,但是可以跳过“bottle do”部分和“测试”部分。

  4. 设置环境变量(不知道这是必需的,但为我工作):

    出口SDL_CONFIG =在/ usr/local/bin目录/ SDL-配置

  5. 取消链接旧1.2.12安装:

    酿造取消链接sdl_image

  6. 现在重新安装,但BREW将使用新的公式1.2。10:

    酿造安装sdl_image

0

saltycraig的回答为我工作,但我必须想一些事情了我自己,我想我应该在这里让人们不必挣扎想办法。

首先,当您在步骤3中更改新的sdl_image.rb以匹配备份时,请务必保留包含此地址的新网址:“https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz”。这看起来很明显,但直到我第二次或第三次查看时才知道。

其次,即使断开sdl_image和安装1.2.10之后,您可能需要删除1.2.12。对我来说,它是在usr/local/Cellar/sdl_image中,因为我酝酿python以避开El Capitan的新SIP阻止我安装pygame。