RenderTargetクラス

RenderTargetクラスを追加した。
これはImageクラスから編集機能を削ったようなクラスだが、RenderTargetオブジェクトは名前の通りレンダーターゲットとして指定できる。
サイズは自由で、
RenderTarget.new(width, height)
とすればそのサイズのレンダーターゲットが生成される。
深度バッファも持つから3Dの描画もできる。
RenderTargetに描画する場合は、普通にWindow.draw系メソッドで描画指定をしたあとに、
Window.update(render_target)
とする。
RenderTargetオブジェクトはWindow.draw系メソッドで描画データとして使える。
従って、このようなことが簡単にできるようになる。

るびまサンプルの画面をRenderTargetオブジェクトに描画し、縮小&回転してスクリーンに描画している。まわっているが普通に遊べる。
結果として、RenderTargetはサーフェイスのような使い方ができる。
シェーダ描画の入力にも出力にも使えて、シェーダの活用範囲は広がるだろう。


ところで、レンダーターゲットテクスチャはデバイスロストで消えてしまうから、これで作ったデータをずっと保持するのには向かない。
現在は実装していないが、Imageオブジェクトに変換する機能も追加しようと思っている。
いまはちょっと面倒だったからDXRUBY_RENDERTARGETという定数に突っ込んである配列に、RenderTargetを作ったら入れてもらうようにしている。デバイスロスト時に解放&復元する必要があるからだ。
この配列を隠して、RenderTarget.newしたときに追加するようにすると、こんどは解放できなくなるから、Ruby管理じゃなく自前のメモリ管理を作らなければならない。
それはまあ、そのうち。