DXRuby1.1の位置づけとか

あんまりやる気が出ないので思ったことをツラツラと書いてみる。
DXRuby1.1はどういうものなのか。


とりあえず、DXRubyとして初心者向けであるという立場は変わらない。
1.0系の機能はそのまま継承するから、とっつきやすさ、扱いやすさは下がることはないのではないかと思う。
ただ1.0系は制限が多すぎて「こんなことできないかな?」と思っても、それをやる方法が提供されていない、という問題があった。たとえばImageオブジェクト間の拡大・縮小・回転コピーとか。Rubyで書けばどーにでもなるとはいえ、速度の問題はいかんともしがたい。
思いつくメソッドを片っ端からCで実装すれば、それは便利なものになるだろうと思うが、俺は笑っちゃうほど面倒くさがりだからそういう努力はしない。ごめんなさい。


1.0ではどうあがいても無理だったものを、1.1系では俺の量的努力以外でなんとかするために、シェーダ・レンダーターゲットという仕組みを作りこんでみた。
レンダーターゲット指定はDirectXの機能の一つで、テクスチャやサーフェイスに対してレンダリングすることができる。
DXRubyではもともとImageをレンダーターゲットにできる、というのを考えていたが、あまりにも難しくて挫折した。が、やっぱりこれが無いとDirectXのオイシイトコロが無くなってしまうから、Imageとは別になってしまうがRenderTargetクラスを導入した。
RenderTargetにはWindow.draw系メソッドで描き込みができ、そこからImageオブジェクトを生成できるから、ようするにスクリーンに対してできるすべての描画をImageオブジェクトに対してもできることになる。
拡大・縮小・回転も線形補間で描画できる。ソフトで作るのは大変だが、この仕組みを作るだけで、3D描画もシェーダ描画もなんでもできるようになる。活用方法はかなり広く、その潜在能力ははかりしれない。
なにより俺がラクだ。作るのは難しいが、量的努力よりも質的努力のほうが好みだ。


シェーダはHLSLで書く必要があるから誰でも使えるものではないが、エフェクトをCで実装してバージョンアップするよりも、HLSLで書いてパブリックドメインで公開したほうがラクだ。
勉強すればユーザーが自分で書くこともできる。
もちろんこれも可能性だけみるととんでもないモノで、他の追加機能、3D描画やレンダーターゲットと組み合わせることでできることは恐ろしいほど広がる。


ようするに、これらの機能はDXRubyの可能性を大きく広げるわりには、俺がラクだ。
レンダーターゲットは勉強する必要もなく簡単に使えるし、シェーダは自分で書けなくても人が作ったものをコピペすればすぐ使える。使うぶんには決して敷居が高いものではない。
1.0系が初心者専用だとするなら、1.1系は初心者にも簡単に使えて、できる人にはそのレベルに応じた可能性を提供する、ターゲットを上に広げるものだ。
どこまで上に広がるのかはわからないが。
もうひとつの目玉機能である3Dについては次。