kumaryu日記
2006-10-14 できたできた
_ [Riko] できた
そんなわけでなんとかなりました。
つってもページまだ作ってないんで実質リリースは明日にします。
クソコンパイラには睡眠時間を削りまくった挙句打ち勝ちました。
コンパイルが通らない件は確かに綺麗じゃない部分があったんでCっぽく直して解決。
かなりいじってコンパイル通った! と思ったら落ちやがる。
バックトレースとか壊れるんで、メモリ破壊っぽいんだが、そんな変なコード組んだっけ?
しかもVC8とgccでは普通に動くんだよな。たまたまかもしれんが。
で、まあここで2日くらい悩んで、メモリ確保でミスってるのを発見。
VC6ではテンプレート関数のインスタンス化がバグで一個しかできんらしい。 コンパイルエラーも警告も無く一個しか作られない。
どういうことかというと、
template <class T> VALUE RBAllocFunc(VALUE klass);
こんな関数があった時にRBAllocFunc<Vector>とRBAllocFunc<Matrix>とRBAllocFunc<Quaternion>が全部同じコードになってしまうわけよ。つまりRBAllocFunc<Vector>になっちまう。
RBAllocFuncは名前の通りメモリの確保だけど、QuaternionとVectorはどっちもfloatが4つだから良かったものの、Matrixは当然16要素あるわけで、それを4要素分しかメモリ確保してないで、あとから16要素分書き込んであぼーん。
いやー、コンパイラがバグってると分かんねーよ。
あとOpenGLの拡張をロードするのにGLEWを使ってた所をGLeeに置き換えた。
これはライセンスの問題。GLEWはほぼBSDスタイルなんだけど、glew.hだけ問題があって、sgiのopengl.hをベースにしてるからsgiのライセンスが混ざっちゃってる。
まあsgiのライセンスは実質フリーなんだが、FSFではノンフリーに分類されてるし、となるとGPLなんかとは互換性無さそうだし。
つかそれ以上に、名前だけ聞いてあのライセンスかーと分からんものを混ぜたく無かった。だって読むのめんどいじゃん。結構長いし。
その点、GLeeはヘッダも作ってるらしくsgiのライセンスに汚染されてない。 ライセンスはこいつもBSDスタイル。作者の名前を勝手に宣伝に使っちゃいけませんよ、って条項が入ってないけど、あったり無かったりする条項だからいいのかにゃ。
そんなこんなでなんとか動くものが出来たから、明日リリースしますよ。
_ Parallels
Parallelsは正式に新バージョン出てた。
VistaRC1を入れて遊んでたんだが、どうもCPU喰いすぎて困る。何もしてない時でも100%越えたりするなぁ。
この辺はまだ対応してないんだろうな。
メモリ2GBに増やしたからWindows2000使ってる分には快適だ。
_ [OpenGL] Extension
おや、Extension Registryにいつの間にか新しい拡張が追加されてる。
EXT_timer_queryとEXT_gpu_program_parametersか。
EXT_gpu_program_parametersは変な名前だが、結局はvertex_programとかfragment_programのパラメータ設定に配列を渡せるようになっただけ。地味な拡張だ。
EXT_timer_queryは指定した間のコマンド実行時間をナノ秒単位で取れるようになる、チューニングに便利な拡張。でも実装されてないじゃん…と思ったらWindowsマシン(GeForce7600GS)では使えるようになってるな。
あともう一個APPLE_flush_buffer_rangeはBufferObjectの非同期書き込みが行なえるようになるってことかな。APPLEなんでほぼMac専用だろうけど。
ARB拡張は増えてないね。