2010年2月12日金曜日

slaxでレイトレーサ

Check
自作のレイトレーサをslaxに移植して「もらった」。学校の先生が空いた時間を使ってやってくださったようだ。
これにより、企業への作品提出にOSごと送りつけるという、面白いことができるわけだ(迷惑かな?)。

ただ、VC++とG++の違いを意識しなくてはならなくなった。具体的にはインラインアセンブラの構文や一部の関数が異なり、現時点では_MSC_VERマクロの有無で切り分けるようにしている。
float Vec::length() const
{
    float len = x*x+y*y+z*z;
#ifdef _MSC_VER
    __asm
    {
        fld    len
        fsqrt
        fstp   len
    }
#else
    len = sqrt(len);
#endif
    return len;
}
速度重視のため、アセンブラ部分はかなりの部分をベタ書きのハードコーディングにしていたが、インライン関数に置き換えるなどしないとメンテしづらいことがわかった。

wxWidgetsはソースコードレベルでの互換性を保障しているわけだが、実際には結構な部分に手を加えなければならなかった。今後は、移植を前提とした書き方に慣れる必要があるだろう。

C#やJavaなどのVM上で動く言語が主流になるのも頷ける。

0 件のコメント:

コメントを投稿