【问题标题】:Rendering Glitch on Mac OSX El Capitan with OpenGL使用 OpenGL 在 Mac OSX El Capitan 上渲染故障
【发布时间】:2016-03-04 05:47:48
【问题描述】:

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

在 El Capitan 之前一切都很好。现在,一些纹理无法正确显示。

球场白线现在是黑色的;播放器纹理都很糟糕;左边的能量棒都是黑色的:

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

游戏的正常外观:

所以错误的纹理是:

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

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

我完全对发生的事情感到困惑。我知道 El Capitan 刚刚给操作系统渲染事物的方式带来了巨大的变化,但我不知道去哪里看,更不知道要修复什么。

它似乎只涉及 RGBA 纹理,但并非所有纹理,因为大多数 GUI 元素仍能正确显示。

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

【问题讨论】:

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


    【解决方案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); 
    

    在那之后,我不再有故障了。 这不是最终解决方案,尤其是在您有很多图形的情况下。

    【讨论】:

    【解决方案2】:

    感谢 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 代码重新编译它,这应该可以解决问题。

    编辑:

    我没有重新编译,而是使用了 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 上被成功接受。

    【讨论】:

      【解决方案3】:

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

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

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

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

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

        酿造创建https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz

      3. 它应该在文本编辑器中自动打开,如果没有用 vim/emacs/nano/whatever 你喜欢的方式打开它并编辑它以匹配原始 sdl_image.rb(现在 sdl_image_backup.rb)所说的大部分内容,但跳过“瓶子做”部分和“测试”部分。

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

        导出 SDL_CONFIG=/usr/local/bin/sdl-config

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

        brew unlink sdl_image

      6. 现在重新安装,但 brew 将使用我们 1.2.10 的新公式:

        brew install sdl_image

      【讨论】:

        【解决方案4】:

        saltycraig 的回答对我有用,但我必须自己弄清楚一些我认为我会在此处包括在内的事情,这样人们就不必费力地弄清楚了。

        首先,当您在第 3 步中更改新的 sdl_image.rb 以匹配备份时,请确保保留新的 url,其中包含以下地址:“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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-12
          • 1970-01-01
          • 2016-11-03
          • 2016-03-03
          • 2017-01-13
          • 2016-04-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多