ゲーム開発の備忘録

趣味のゲーム開発でのノウハウや、技術的に嵌ったポイントを忘れないように書き記しておくブログです。

libGDXでαブレンディング以外のブレンディングを実現する

libGDXはゲーム開発を補佐するライブラリであり、 DXLib等の有名なライブラリと同様に、描画等の処理を簡単に実現するための関数群が用意されています。 が、ブレンディングの設定に関しては関数が用意されていません。

αブレンディングであれば、TextureやBitmapFontのcolor.aを操作したり、 SpriteBatch.draw()の第二引数にα値を指定することで実現できますが、 その他のブレンディングについてはサポートされていません。

そこで、libGDXがラップしているOpenGLに直接アクセスします。
Gdx.glでOpenGLのクラスを直接取得できるので、 そこからglBlendFunc()等のOpenGLの生のメソッドを直接呼び出します。 GL_BLEND等のOpenGL側の定数値は、GL20.GL_BLEND等で取得できます。 (OpenGL2.0の場合はGL20、OpenGL3.0の場合はGL30を指定します)

ただし、ここで問題があります。 生のOpenGLとlibGDXの描画系はそのままでは共存できないのです。 ブレンディング用にシェーダを書いて実行しても無効化されてしまいます。 これを一からどうにかするのは面倒なので(実際に面倒だったので)、 先人が作成したツールをありがたく使わせてもらいます。

github.com

リファレンスはすべて英語ですが、 使い方はそれほど複雑ではないため、困らないかと思います。

シェーダ自体は結局書くことにはなるのですが、 そもそもブレンディングに限らずlibGDXのもともとの描画機能はそれほど充実していないため、 シェーダを書かなくてはならない場面が頻繁に発生します。 そんな時も上記のツールを使用すれば、 とりあえず面倒なlibGDXと生のOpenGLの共存処理は吸収させることができます。