トップ 最新

kumaryu日記

2010-09-30

_ [Riko] RikoのGLES2対応

GLES2対応っつーかDirect3D9対応っつーか?

GMA500でもD3D9なら最低限のアクセラレーションは動くようなのでANGLE Project使ってGLES2のシミュレーション経由でD3D9を使うことにした。

むかーしANGLEをビルドしたのを動かしてみたら落ちたんだけど昨日取ってきたのは動いたんで大丈夫そう。つってもサンプルには簡単なVertexShaderまでしか無いのでFragmentShader使い始めたらどうなるかはわからんが。

GLES2対応するにはまずEGLでコンテキスト作らないといけないのでEGLの勉強から。基本的にはwglと似たようなものか。むしろシンプルでいいね。

とりあえずなんとかウィンドウ表示はできた。しかし閉じる時に落ちるなぁと思ったらコンテキストとか削除する前やした後にeglMakeCurrentでEGL_NO_DISPLAYとか明示的に設定するとなんか落ちるっぽい。ライブラリの中まではおっかけられてないけどまあいいや。

あとは今までOpenGLだったところをGLES2に置き換えていけばいいんだな。

OpenGLとGLES2の両対応はどうしようか悩んでたんだけど、Rubyから見てだいたい同じインターフェースの拡張ライブラリを2つつくればいいだけだ。

最初は1つの拡張ライブラリ内部でなんとか切り替えできないか考えてたけどCレベルで複雑になるのは避けたいね。

どうせ両方同時に使うことはありえないので、どっちの拡張ライブラリをロードするかで変わるのがよさげ。

重複するコードが出るだろう所が気になるがまあそこはなんとか上手くやりましょう。

これでANGLEでD3D9対応が上手くいったらいろいろと楽になる。OpenGLは2.0以降前提にしちゃって、それが動かないアレなIntelはGLES2使えってことにできるしね。Windows以外?ほっとけよ。

GLES2対応自体は今はRiko本体はシンプルなのでそれほど難しくないと思う。まあしばらくかかりそうではあるがな。