なんか家揺れてるんですけど。
wktkしすぎで寝れない。
明日電車止まってれば休むんだが、ゆっくり動いてるとかだと悲惨。
夜中になったら平常通り運行とか行ってるぜ。そりゃまあ平常通り動いてないよな。
朝になってすげー風雨なんですがさすが京急なんともないぜ! しかし駅に辿り着く前に傘が骨だけになること必至なので、落ちつくまで二度寝。
すぐ落ちついたんでおとなしく出勤しませう。
やはり行列とかの辺りが弱いなぁ。
オブジェクトの割り当てはメモリ確保する必要があればその分遅いし、GCも発生しがちになるからなるべく抑えたいんだけど。
行列掛ける時にオブジェクト新しく作って返してたりしちゃってるんで、掛けて代入できるメソッドとかちゃんと必要だよね。*=とか再定義してるつもりだけど、これ意味あんのかな? 使われない気もするんだ。
あとなんか変なところがあるとは思ってたんだが、なんか逆行列計算がかなーり簡易だ。左上3x3の逆行列求めて、平行移動分引くとかやってるな。これで済む場合はこれでいいんだが、一般的にはまずいので、ちゃんと求めるメソッドと分ける必要があるな。
SSEとかのSIMD命令も使いたいんだが、使えるかどうかの判定がめんどい。判定はアセンブリで命令発行しないとできないんだが、VCとgccでインラインアセンブリの書き方違うし。
xmmintrin.hとか使えばSIMDを使うコード自体は共有できそうだけどな。でもgccがひどくて、SSEなんかの組み込み関数を使うのに-msseが必要なんだが、-msseを使うと最適化で勝手にSSEが使われるらしい。
CPUIDで判定しようにも、そもそもどっかで勝手に使われるんじゃ判定しても意味無いわな。なのでSSEを使うファイルだけ-msseを付けてコンパイルして、CPIIDで判定してそのファイル内の関数全部を通すかどうか判別する必要があるみたい。
なんか不便な仕様だなぁ。
ふと思ったが、x86で今時SSEついてないCPUなんてあんのかな? そりゃPen3以前のCPUにはないだろうけど、Rikoの最低環境がOpenGL1.3だからなぁ*1。
とは言え、SSE3が使えるなら使いたいから、その場合は判別する必要があるか。SSE3は水平加算があるから内積とか速く出来ると思うんだけど、どのCPUにも付いてるって程古くもないもんね。
PPCMacでも動くように気を付けてはいるが、AltiVecはいいよね…。つかx86以外はかなり優先度落ちちゃうよねぇ。Macですらx86になっちゃうと。
いろいろ直さなきゃならんのはあるけど、なかなか手がつけられん。
*1 MacBook対応で1.2まで下げなきゃならん気はしてるんだが