Open6

C-WebGL: GLES2エミュレーションの実装(trivialケース)

okuokuokuoku

まずは何も変換が要らない奴を実装していく。 glEnable とか glViewport のような、対応するWebGLメソッドを呼べば良いだけのやつ。

okuokuokuoku

Section 2

https://github.com/okuoku/cwgl-glue/commit/1675fc6fc94a6a00be54e878e778f1f5a8e84f34

意外とtrivialでないものが多い。逆に、ArrayでないAttributeはtrivialに変換できる。

glError はグルー側のエラーとマージしてやる必要がある都合で専用のロジックが必要になる。このため、単にGLESバックエンドに尋いて終わりということにはできない。

AttribPointer 類や描画コマンドは、Client side arrayが使われそうになったら一旦テンポラリなバッファを確保して転送してやる必要があるのでtrivialには実装できない。

Uniform 類は、WebGLではUniform Locationが専用のオブジェクトになった関係でtrivialには実装できない。専用のキャッシュを持つ必要があるなど結構ややこしい実装が必要。

Program 類はOpenGL的なnameとWebGL側のオブジェクトの変換が必要。

okuokuokuoku

Section 4

https://github.com/okuoku/cwgl-glue/commit/2ea993187c041fdf4bb7902dffcc4737003b5a28

FramebufferRenderbuffer はOpenGL的なnameとWebGL側のオブジェクトの変換が必要。

glReadPixels は行けそうに見えるが、C-WebGLでは全てのバッファは長さを明示的に指定する必要があるため、グルー側でバッファの長さを計算してやる必要がある。 ... これステートを追跡しないでできるのかな。。?

okuokuokuoku

Section 6

Section 6 はクエリなので全て変換が必要。。よってTrivialなものは無い。