2019/04/14(日) [n年前の日記]
#1 [ruby][dxruby] DXRuby 1.4.6が公開されていたとメモ
Ruby 2.3 - 2.6 まで対応した、
_DXRuby 1.4.6
が公開されていたことを、遅ればせながら今頃知った。とメモ。ありがたや。
一応説明しておくと…。DXRuby は、Ruby というプログラミング言語から、Windows の DirectX を制御できる、2Dゲーム制作ライブラリ。
特長としては…。
ただ、最近まで、ちと問題があって。Windows上で動作するRubyとしては一番メジャーであろう _RubyInstaller for Windows が、ある時期からビルド環境を変更した関係で、DXRuby のバイナリをビルドできなくなっていたそうで。ここ数年、Ruby本体のバージョンはどんどん上がっていくけれど、DXRuby はRuby本体のバージョンアップに追従できない状態になって…。「DXRubyを最近のRubyで使いたいのですが」と尋ねられても、「最近のRubyには対応してません。サポート期間が終了しちゃってる古いバージョンのRubyを使ってください」と返答するしかなかったという。
しかし、今回、DXRuby 1.4.6 が公開されたことで、少なくとも Ruby 2.6 までは DXRuby を使えそうな状態になったわけで。ありがたや。
一応説明しておくと…。DXRuby は、Ruby というプログラミング言語から、Windows の DirectX を制御できる、2Dゲーム制作ライブラリ。
特長としては…。
- 他の2Dゲームライブラリと比べると描画が比較的高速なので、ガンガン描画して、リッチでゴージャスなゲーム画面を作れる。
- 機能の呼び出し方・記述の仕方がシンプルなので、プログラミング初心者でもすぐ使える手軽さがある。
ただ、最近まで、ちと問題があって。Windows上で動作するRubyとしては一番メジャーであろう _RubyInstaller for Windows が、ある時期からビルド環境を変更した関係で、DXRuby のバイナリをビルドできなくなっていたそうで。ここ数年、Ruby本体のバージョンはどんどん上がっていくけれど、DXRuby はRuby本体のバージョンアップに追従できない状態になって…。「DXRubyを最近のRubyで使いたいのですが」と尋ねられても、「最近のRubyには対応してません。サポート期間が終了しちゃってる古いバージョンのRubyを使ってください」と返答するしかなかったという。
しかし、今回、DXRuby 1.4.6 が公開されたことで、少なくとも Ruby 2.6 までは DXRuby を使えそうな状態になったわけで。ありがたや。
◎ 動作確認してみた。 :
Windows10 x64 + Ruby 2.5.3 p105 i386-mingw32 + dxruby 1.4.6 で動作確認してみたけれど、公式で配布されてる、
_DXRuby1.4.4サンプル集
の一部が動かないことに気づいたので一応メモ。
それぞれ以下のエラーメッセージが表示される。
ちなみに、Ruby 2.3.3 p222 i386-mingw32 + dxruby 1.4.5 では、上記のエラーは出なかった。
- shader_sample/sample_lens.rb
- shader_sample/sample_mapping.rb
それぞれ以下のエラーメッセージが表示される。
> ruby sample_lens.rb Traceback (most recent call last): 2: from sample_lens.rb:47:in `<main>' 1: from sample_lens.rb:47:in `new' sample_lens.rb:47:in `initialize': D:\hoge\dxruby144-samples\sample\shader_sample\memory(4,8): error X3000: syntax error: unexpected token 'point' (DXRuby::DXRubyError)
> ruby sample_mapping.rb Traceback (most recent call last): 2: from sample_mapping.rb:38:in `<main>' 1: from sample_mapping.rb:38:in `new' sample_mapping.rb:38:in `initialize': D:\hoge\dxruby144-samples\sample\shader_sample\memory(14,28): error X3005: 'distance': identifier represents a variable, not a function (DXRuby::DXRubyError)
ちなみに、Ruby 2.3.3 p222 i386-mingw32 + dxruby 1.4.5 では、上記のエラーは出なかった。
◎ CustomRenderTargetは追加されてなかった。 :
DXRuby 1.5.21dev / 1.5.22dev で追加されていた CustomRenderTarget も追加されているのかなと期待したけれど、そのあたりは追加されていなかった。とメモ。
CustomRenderTarget というのは…。頑張れば DXRuby で3D描画ができるようになったりする機能、という説明でいいのだろうか。3D描画にしか使えないわけではなく、作者様はベクターグラフィック関係の実験をするために実装したらしいけれど。
とりあえず自分は、以下の実験で使った。と一応メモ。
_mieki256's diary - DXRuby開発版のCustomRenderTarget関係を勉強中
_mieki256's diary - DXRubyのCustomRenderTargetを勉強中その2
_mieki256's diary - COLLADA形式の3Dモデルを読み込むRubyスクリプトを書いた
_mieki256's diary - フォンシェーディングっぽくなってきた気がするけどまだなんだか怪しい
CustomRenderTarget というのは…。頑張れば DXRuby で3D描画ができるようになったりする機能、という説明でいいのだろうか。3D描画にしか使えないわけではなく、作者様はベクターグラフィック関係の実験をするために実装したらしいけれど。
とりあえず自分は、以下の実験で使った。と一応メモ。
_mieki256's diary - DXRuby開発版のCustomRenderTarget関係を勉強中
_mieki256's diary - DXRubyのCustomRenderTargetを勉強中その2
_mieki256's diary - COLLADA形式の3Dモデルを読み込むRubyスクリプトを書いた
_mieki256's diary - フォンシェーディングっぽくなってきた気がするけどまだなんだか怪しい
◎ 2019/04/17追記。 :
Shaderのサンプルが2つほど動かないのは、去年の時点で把握済みの現象だった模様。
_mirichiさんのツイート: "シェーダ周りでなんか変なのが2つほどあって..."
なるほど。
_mirichiさんのツイート: "シェーダ周りでなんか変なのが2つほどあって..."
とりあえず致命的なバグはもう無いっぽいけども、シェーダ周りでなんか変なのが2つほどあって、変数名がなぜか怒られるのと、関数が使えないのと。 変数名は予約語関連だろうし、関数はHLSLコンパイラの話だから、こっちではどうにもできん。せいぜいサンプル書き換えるぐらい。
シェーダ内のpointという変数と、distanceという関数がひっかかりました。 変数名は変えれば動きまして、関数のほうは無いと言われたので簡単だし自分で作ればいいのかなと思ってるところです。
なるほど。
[ ツッコむ ]
以上です。