Open2
C-LegacyGL: WebGL1を固定パイプラインにできないか検討する
![okuoku](https://res.cloudinary.com/zenn/image/fetch/s--xsxQRr40--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1e7fbed78b.jpeg)
課題: OpenGL 1.1 しか動作しないような環境のプログラムをC-WebGLで書きたい
解決策は2方向考えられる:
- 前回挙げた https://zenn.dev/link/comments/988b9f82e37d05 MozillaのCanvas 3D草案のように、OpenGL ES1に直接対応するインターフェースを用意する
- シェーダーを事前生成し、
useProgram
で渡せるようにする。OpenGL 1.1環境上のC-WebGLでは事前生成されたシェーダーしか使えないようにする。
C-WebGLはWebGLの再現に注力しているが、今回の環境は既存のプログラムが何かあるわけではないので既存の規格に何か合わせる必要性は薄い。というわけで今回は後者の方向性を考えてみることにする。
![okuoku](https://res.cloudinary.com/zenn/image/fetch/s--xsxQRr40--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/1e7fbed78b.jpeg)
仕様の選定
今回はTinyGLの仕様に揃える。Windows95のOpenGLは更にsphere map等もサポートしているので使いたいけど後まわし。
- 頂点属性は座標、頂点カラー、テクスチャ座標、法線 (座標以外はオプショナル)、ライティング用マテリアル属性
- ライトは8つまで、ライティングは頂点単位(グーローシェーディング)、ライト属性
- テクスチャは 0〜1 枚
OpenGL1.1 https://registry.khronos.org/OpenGL/specs/gl/glspec11.pdf の図がわかりやすいかな。
... 頂点カラーとライティングの両方を使ったらどうなるんだ。。? → GL_COLOR_MATERIAL
して指定したマテリアルパラメタに入れる。