C# + OpenGL のCADフレームワーク「ヒスイ」1.7をリリースしました

実は先週末の話なのだけれど、ヒスイ1.7をリリースしたのでお知らせ。
http://www.quatouch.com/products/hisui/index.html

ダウンロードはこちら: http://www.quatouch.com/products/hisui/hisui-1_7_0_0-20080530.zip
更新履歴はこちら: http://www.quatouch.com/products/hisui/doc/changelog.html

64bit で動いた

今までGLUT32.DLLを使っていたのだけれど、GLUT は 64bit に対応していない。いや、なんか Solaris とか他のOSでは64bit版もあるみたいなんだけど、Windows 版はないっぽい。このせいでヒスイが64bitで動かないので、困ったなーと思ってたわけです。
この世界では、64bitは重要だ。点群とかポリゴンとか、とんでもなくでかいデータを扱っている人がいるんですよね、この世の中には。
そんなわけで、別にGLUTといっても大した機能を使っているわけでもなかったので、必要な部分だけ C# で自分で実装を用意した。これでGLUTが不要になったので、64bitでも動かすことができたのであった、めでたしめでたし。あ、ちなみに、まだ「弊社オフィスにある一台の64bitマシンで動くのを確認したよ」ってだけなので、もしかするとまだ何か問題が残っているかもしれないです、念のため。
前回の1.6のリリースから CsGL も切り離したので、外部ライブラリへの依存はかなり解消したなー、と満足している。

Vista のノートPCで動いた

いや、これはたまたま弊社にある Vista のノートPCの話なのだけど、実は今までヒスイがうまく動いていなかった。ビューのリフレッシュがうまく動かないのか、ビュー上にメニューや他のウィンドウの残像が残ってしまったりと、正しく描画が処理されないという現象が起こっていたのだ。
Vista でも GeForce とか積んでるデスクトップマシンなら問題なく動いていたのだけど、どうやらノートPCみたいに非力なオンボードのグラフィックプロセッサだとダメみたいだった。しかし、OpenGL自体がダメというわけではなく、他のOpenGLを利用しているソフトの中には正常に動くものもある。
実は同様の現象はお客様からも寄せられていて、これは何とかしなくては、と思っていたのだ。今回と前回のリリースで大分OpenGL周りを変更したので、「もしかして」と期待しながらその Vista ノートPCで試したところ、以前のような現象は解消されて正常な動作が確認できた。
えっと、これは怒られてしまうかもしれないけれど、原因はよく分かっていない。ピクセルフォーマットの設定とか変わったからかなー?それとも別のバグがOpenGL周りの修正に伴っていつの間にか解消していたのかなー?

OpenGLの描画をより便利に

こんな風に書けるようにしたよ。

void Draw( Hisui.Graphics.ISceneContext sc )
{
  Hisui.Geom.Point3d p1, p2, p3, p4;
  using ( var scope = sc.Push() ) {
    scope.Color = Color.Red;
    sc.DrawLineStrip( gl => gl.Vertices( p1, p2, p3, p4 ) );
  }
}

LINQなどでかなり IEnumerable の扱いが便利になったので、IEnumerable みたいな頂点列を受け取れる関数を用意してあげるといい感じ。上記の例は IEnumerable じゃなくて配列だけど。