kumaryu日記
2008-06-16 おのれ
_ [OpenGL] おのれNVIDIA
OpenGLの味方NVIDIAに裏切られまくった感じ。
Macでゲームのapp作って上げてみたら動かないといわれ、確かにシステムにCg.frameworkいれてないと動かなかった。
しかしappのContents/Frameworks/Cg.frameworkはいれてあるんだけど。
で、調べたら、@execute_path/../Library/Frameworks/Cg.frameworkとかにリンクしてやがる。@execute_pathだかはContents/MacOSXとかになるはずだけど、Library?
もっと調べたらそのパスを指定してるのはCg.framework側。普通にリンクした時点でそのパスを見るようになっている。つまりCg.frameworkが頭おかしい。
しかたないのでContents/Library/Frameworksとか変なディレクトリ掘ってそこにいれといたけど。
あとなんかPPCでの動きが怪しい気がするけどこれは要調査。
で、あとはWindows。なんかinstall.exeをインストーラ扱いして、管理者権限ないと動かせないというVistaの御粗末な仕様にはめられたりしながら必要なライブラリビルドしたんだけど。
なんか落ちる。よくわからないところで落ちる。OpenGLのエラーが出ればRubyレベルで例外出すようにしてあるんだが。
そういやドライバのエラーレポートが標準でオフだーと思ってオンにしてみたけど、エラー無し。
全然わからなかったけど、とりあえずドライバのスレッド最適化を切ったら今度はエラーが出やがった。…スレッド最適化って余計な事しかしないようだけどなんなのよ!
で、エラーの内容はcgGLSetParameterPointer内でGL_INVALID_ENUM…。なにそれ?
Macだと動いてるんだけど違いといえば、MacはRadeonX1600、WindowsはGeForce8600。
えーと、gp4vpプロファイルがぶっこわれてますか?arbvp1にしたところちゃんと動いたみたい…。なるべく最新のプロファイルつかえっていったじゃん…。
あ、違う、これは俺が悪そうだ。頂点のスキニング用に行列インデックス渡してるんだけど、GL_FLOATで渡してint4で受け取ってるわ。
vp40までならこれで問題ないけどgp4vpでは整数が本当に整数として扱われるから、整数で渡すかfloat4で受けなくちゃいけないんだな。
うーん、やはりあんまり変なことはしちゃいけないな。
やっぱりCg捨てたいね。