Open4

C-LegacyGL: TinyGLを駆動したい会

okuokuokuoku

とりあえず一旦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 されている機能に応じて自動的にシェーダーを生成するといった対応が必要になってしまいちょっと面倒すぎる。。事前にそれらしい機能セットを選定しておくことになる。

okuokuokuoku

一発完動で年初から縁起が良い

VisualStudioのためにちょっと修正している。

https://github.com/okuoku/tinygl-cmake/commit/ba4c030cbeb0d73a862b16e7a37807dcac927588

MSVCのlibcでM_PI のような数学定数を使うには _USE_MATH_DEFINES が必要。

https://github.com/okuoku/tinygl-cmake/commit/832d822cc2c9cc3f3231f3e63a897e2a7c9e20af

MSVCはC標準の可変長マクロしか実装していないのでそちらに置き換え。

shim

gearsサンプルはSDL2の描画部分と、メモリ上に画像を作成する部分にキッパリ分けてしまっている。

https://github.com/okuoku/tinygl-cmake/commit/4c7f1ca9dd51bc94a2a38c7d6a2e5bf1cdf23267

このうち、メモリ上に描画された画像の取得は 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 は描画内容を取得する。

okuokuokuoku

仕様の確認

https://github.com/okuoku/tinygl-cmake/blob/master/TinyGL/LIMITATIONS

必要なものは概ね有る ...んだけど、 DEPTH_TEST を切れないってマジかよ(ただし、たぶんワイヤーフレーム用にlineだけは切れるようになっている)。。さすがにこれくらいは改造して付けようかな。。あとサブセットだから仕方ないけどステンシルが無いのも微妙に困る。

framebufferオブジェクトとかも改造して付けてしまった方が良いかもしれないけど、素のWindows OpenGLでできたかどうか覚えてないので保留。