C-LegacyGL: TinyGLを駆動したい会
とりあえず一旦TinyGLのOpenGL1.1サブセットに対応することを目指す。マルチテクスチャとかも欲しいけどまぁ我慢だな。。
ソースコードは既存のWebGL1実装とは分ける。つまり、C-WebGLのバックエンドは
- fixed: OpenGL1.1 or GLES1 (Trackerを使用)
- gles2: GLES2 or GLES3
- tgles2: GLES2 or GLES3 (Trackerを使用)
- vulkan: Vulkan (Trackerを使用)
という感じにする。C-LegacyGLは機能的にはC-WebGLのサブセットでありながら、C-WebGLから見ると拡張となる。更に C-LegacyGLはGL1の機能性を全て実現するわけではない 。本当にGL1を実現しようとすると、 glEnable
されている機能に応じて自動的にシェーダーを生成するといった対応が必要になってしまいちょっと面倒すぎる。。事前にそれらしい機能セットを選定しておくことになる。
TinyGLをCMakeに持ってくる
とりあえず README
ファイルの日付けをコミット日付にしてみた。作者の手元ではSubversion管理っぽいが。。
一発完動で年初から縁起が良い
VisualStudioのためにちょっと修正している。
MSVCのlibcでM_PI
のような数学定数を使うには _USE_MATH_DEFINES
が必要。
MSVCはC標準の可変長マクロしか実装していないのでそちらに置き換え。
shim
gearsサンプルはSDL2の描画部分と、メモリ上に画像を作成する部分にキッパリ分けてしまっている。
このうち、メモリ上に描画された画像の取得は tglshim.c
に纏めている。APIは至極シンプルで、
int tglshim_capture(void** out_pixels, int* out_x, int* out_y);
int tglshim_alloc(int xsize, int ysize);
tglshim_alloc
は初期化を行う。 tglshim_capture
は描画内容を取得する。
仕様の確認
必要なものは概ね有る ...んだけど、 DEPTH_TEST
を切れないってマジかよ(ただし、たぶんワイヤーフレーム用にlineだけは切れるようになっている)。。さすがにこれくらいは改造して付けようかな。。あとサブセットだから仕方ないけどステンシルが無いのも微妙に困る。
framebufferオブジェクトとかも改造して付けてしまった方が良いかもしれないけど、素のWindows OpenGLでできたかどうか覚えてないので保留。