NanoGLを試す

この記事はRuby Game Developing Advent Calendar 2016 - Adventar20日目です。昨日は空いてました。

NanoGL

NanoGLをGoogleさんに問い合わせるとWebGLラッパーが出てくるが、ここで言うNanoGLはそれではなく、nanovgを描画のベースにしたマルチプラットフォームの2DゲームライブラリNanoGLのことである。基本C用のライブラリだがCRuby用/mruby用のバインダも用意されている。使い込んでいるわけではないので「こういうものがあるよ」という紹介レベルで。

できること

描画がnanovgベースなのでHTML5canvasっぽいAPIでベクタグラフィックスができる。nanovgのページの下のほうにサンプルのスクリーンショットがあるが、あんな感じの描画ができる。NanoGLの描画はnanovgの関数ほぼそのままなので、nanovgのサンプルを部分的に移植してみたところ、

という感じで同じようなものを描画することができる(コード)。まあ、ベクタグラフィックスのコードが面倒な感じになるのはしょうがないのかな。
他、GLFW3でのキーやマウス、パッドの入力、OpenAL-Softによる音の再生など基本的な機能が用意されている。

ポイント

オープンソースマルチプラットフォームライブラリを使っているのでNanoGLもマルチプラットフォームである。WindowsMacでのビルド方法が解説されている。ubuntuディレクトリがあるしubuntu対応とも書いてあるのでLinuxでもビルドできるかもしれない。また、Windows用にバイナリでもリリースされていて、gemをダウンロードしてインストールするとバイナリが入る。やさしい。また、mrubyはNanoGLが組み込まれたexeが同梱されているので、動かしてみたい人はこれで。
サンプルはC用とRuby用がそれぞれ14個ずつ用意されている。実際に遊べるSTGなどもあるので参考になる。どうでもいいが04-Image.cが03-TransformMulti.cと同じ中身になってしまっている。

Ruby用ラッパーはほぼCインターフェイスをそのままffiで呼ぶ感じなので、基本的には何かしら自分で書き足して使う感じになるだろうと思う。nanovg自体がそんな感じだし。
あと、Ruby用ラッパーのVideo.rbに少々バグがあって上記のnanovgサンプルの一部を移植したやつはこの記事を書いてる現時点の最新バイナリリリースでは動作しない。リポジトリにはバグ修正がコミットされているのでそれを落として上書きすれば動くようになる。
ちなみにリファレンスは無いがRuby用ラッパーにはコメントがバッチリ入っているのでそれが参考になる(Video.rbだけ)。

dxruby on nanogl

そもそも存在を知ったきっかけがコレ。DXRuby互換ラッパーが作られている。現状ではDXRubyのclassic_sampleが動作するそうだ。手元でいくつか動かした感じではちゃんと動いていた。SoundEffectも(?!)。完全互換は原理的に難しいとして、どこまで行けるものなんだろうね。
ともあれ、ある程度の互換性さえ取れれば例えばRuby教室などの教材はそのままにMacLinux対応できて、それならWindows用もコレでいいんじゃね?ってなることが期待できるので、作者の人にはぜひとも頑張って頂きたい。

おしまい

サンプルは地味だがnanovgの表現力は非常に高いので、手軽にベクタグラフィックスで遊んでみたい人にはオススメ。
明日の記事は・・・こっちも空いてますな。