Open2

C-LegacyGL: WebGL1を固定パイプラインにできないか検討する

okuokuokuoku

課題: OpenGL 1.1 しか動作しないような環境のプログラムをC-WebGLで書きたい

解決策は2方向考えられる:

  1. 前回挙げた https://zenn.dev/link/comments/988b9f82e37d05 MozillaのCanvas 3D草案のように、OpenGL ES1に直接対応するインターフェースを用意する
  2. シェーダーを事前生成し、 useProgram で渡せるようにする。OpenGL 1.1環境上のC-WebGLでは事前生成されたシェーダーしか使えないようにする。

C-WebGLはWebGLの再現に注力しているが、今回の環境は既存のプログラムが何かあるわけではないので既存の規格に何か合わせる必要性は薄い。というわけで今回は後者の方向性を考えてみることにする。

okuokuokuoku

仕様の選定

今回はTinyGLの仕様に揃える。Windows95のOpenGLは更にsphere map等もサポートしているので使いたいけど後まわし。

  • 頂点属性は座標、頂点カラー、テクスチャ座標、法線 (座標以外はオプショナル)、ライティング用マテリアル属性
  • ライトは8つまで、ライティングは頂点単位(グーローシェーディング)、ライト属性
  • テクスチャは 0〜1 枚

OpenGL1.1 https://registry.khronos.org/OpenGL/specs/gl/glspec11.pdf の図がわかりやすいかな。

... 頂点カラーとライティングの両方を使ったらどうなるんだ。。? → GL_COLOR_MATERIAL して指定したマテリアルパラメタに入れる。