GeForceをマルチコアなマシンに載せると、OpenGLの描画がとてもとても遅くなる件。
調べてみたらopengl.orgのフォーラムでも話が出てた。
ドライバ設定を変えればいいんじゃね、ということだが、いちいちユーザーに設定を変えてもらうのは大変。readme読む前に質問してくるからな。
そんなわけでプログラム制御にするにはどうするよ、というのでOpenGLのコンテキストを作るときだけSetProcessAffinityMaskを1で設定しちゃえばいいんじゃね、とな。おおうまいこと考えるな。
しかし根本的な問題についてはわかっていない模様。最後の方で解決したぜ、と言う奴がいるが、よくわからんけどいろいろやってたら何かうまくいった!とかあるし。チラシの裏にでも書いてろよ。
あんまりMac固有なことはしてないからMacでというほどのことも無いんだが。
Macのデスクトップを取り込んでWindowsマシンに比較的高速に転送するアプリを作ってた。
本当はリアルタイムにWMVにエンコードしてそのままストリーミング配信できるのがいいんだが、それはさすがに大変過ぎるのでできるところで妥協。
予想以上に苦労はしたが、勉強になったからよかったな。
スレッドや通信にはSDLを使った。最初pthreadとsocketを使ったんだが、Windowsに持っていくのが非常に面倒なので止めた。
なんか変な使いかただなとは思ったけど描画はglfwとOpenGLでスレッドと通信だけSDLだぜ。
で、SDLで困ったのがユニバーサルバイナリ。ふつうにMacPortsで+universalのSDLとSDL_netを使ってたんだが、どうもうまくppc側が作れていない。
しかし、公式に行ったらフレームワークのSDLとSDL_netがあったのでそれを拾ってきて一件落着。
GUIもWindowsとMacで使いまわしたかったのでwxRubyにしたんだがちょっと失敗だったかも。
アプリケーションバンドル内に入れるとこいつらだけで10MB越えやがる。 あと取り込み側はMac専用なんでRubyCocoaでもよかった。画面サイズ取得したかったのにwxRubyではクラスが実装されてなかったよ…。
とりあえずバイナリだけ公開しといたけど、ソースも入れ直してこっちにも張ろうか。現状特定用途向けにひっそり置いてあるだけなので。
WMVエンコードはffmpegとか使ってなんとかして、あとは自前でストリーミングサーバー作れないかなぁ。ffserverとかvlcのストリームアウトが何故か動かないんだよねぇ。
しかし動画フォーマットは資料があんまり見つからないなぁ。