cocos2d-x 2.2.6のmac版がOS X El Capitanでクラッシュする

Written by uechoco 1月 16
この記事を読む時間:221くらい

MacBook AirをEl Capitanにアップデートしたら、cocos2d-x 2.2.6のproj.macがクラッシュするようになりました。

  • cocos2d-x 2.2.6
  • proj.mac
  • OS X 10.11.2 (El Capitan)

デバッグコンソールに表示されるエラーメッセージは

  1. libc++abi.dylib: terminating with uncaught exception of type std::logic_error: basic_string::_S_construct NULL not valid

こんな感じでした。ちょっとだけステップ実行で追ってみたら、クラッシュ箇所はすぐに見つけられました。
CCConfiguration::gatherGPUInfo() の中の glGetString(GL_VENDOR)) が NULL を返していて、 std::string の初期化に失敗しているようでした。
試しに glGetError しても何も返ってきません。。。

ぐぐってみると同様の事例がフォーラムに上がっていました。

http://discuss.cocos2d-x.org/t/cocos2d-x-2-x-on-mac-osx-el-capitan/23035/6

解決策として「[glView lockOpenGLContext]; を cocos2d::CCApplication::sharedApplication()->run(); の前に呼ぶ」というのが書かれていましたが、lockしてるのにunlockしないのが気持ち悪くてもうちょっと調査しました。
手元の環境では lockOpenGLContext ではなく、prepareOpenGL を呼んでも解決しました。おそらくどちらのメソッドにも含まれている「[[self openGLContext] makeCurrentContext];」が大事なのかもしれません。NSOpenGLContextが予め正しく作られていないと動かなくなってしまったのでしょうか。。。