Open4

C-WebGL: GLES2の実装方針を考える会

okuokuokuoku

とりあえずDirectX 8/9が動作する程度にはC-WebGL上でOpenGL ES2をエミュレーションしたい。逆にGLES3は殆ど需要無いんじゃないかという気がする。

okuokuokuoku

必須の要素

  1. C-WebGLやWebGLではコンテキストを全てのAPIに与える必要があるが、OpenGL ES2 / EGLではスレッドローカルな"カレント"コンテキストが存在する。
  2. オブジェクトは int 型の数値で指される。C-WebGLではポインタ。
  3. いわゆるClient side arrayの利用が許容されている。(WebGL1 6.2)

地味にEGLのエミュレーションも壁だな。。まぁ今回は適当でも良いけど。

WebGL1の仕様には差分が纏められている:

https://registry.khronos.org/webgl/specs/latest/1.0/#6

... これらの差分の殆どはDirectXや細かいOpenGLの実装差異に由来するので無視して良い。

ちょっと不味そうなのは DEPTH_STENCIL render bufferの扱いくらいだろうか。。

okuokuokuoku

とりあえずGLES2のglueを追加

https://github.com/okuoku/cwgl-glue/commit/68690c4286d73018fa3fbd7725303ac26f266b32

規格書はconstnessについてちゃんと指定していないようで、規格書のコピペだと上手くいかない箇所が割とあった。例えば、Khronosのヘッダでは:

GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, 
  const GLchar *const*string, const GLint *length);

*const* って何だよ。。規格書では

のように、細かいところまでは const が付けられていない。

gl4esは全てのエントリポイントをEGL経由で取得するので、更にそれ用の奴を用意する必要があるな。。