Open9

C-LegacyGL: OpenGL1向けにWebGLをサブセットできないか問題

okuokuokuoku

WebGLは登場が2011年でその当時にはシェーダーを使った3Dプログラミングは普通のものになっていた。というわけで、シェーダー以前のハードウェア向けのWebGLというものは存在しない。

が、C-WebGLはできれば古いOpenGLハードウェアに対応したい。そのためには、何とかしてWebGLからシェーダー部分を抜き、固定機能向けのデータ供給機能を追加する必要がある。

例えばglTFのマテリアルに対応するとか、固定機能でもそれなりにリッチな出力を模索することはできなくもない気はする。

okuokuokuoku

MozillaのCanvas 3d

https://hg.mozilla.org/mozilla-central/file/814e972a6658d42410c23325df4e1222566283da/extensions/canvas3d/public/nsICanvasRenderingContextGLES11.idl

nsICanvasRenderingContextGLES11.idl にIDLがある。

... 当時のGLES2.0コンテキストは現在のWebGLのご先祖に相当する https://hg.mozilla.org/mozilla-central/file/814e972a6658d42410c23325df4e1222566283da/extensions/canvas3d/public/nsICanvasRenderingContextGLWeb20.idl 。この当時はOpenGLオブジェクトの識別が数値だったり、 readPixels が無かったりするのも興味深いな。。

okuokuokuoku

WindowsNTのOpenGL1.1

https://learn.microsoft.com/ja-jp/windows/win32/opengl/opengl-reference

OpenGL1.0には無かったArrayや glDrawElements がWindowsでは使えるようになっている。

https://www.youtube.com/watch?v=pwpXg_8G2Ec

Windowsはいくつかのスクリーンセーバーにその名前を冠してOpenGLを飛躍的に有名にしたが、結局自身のDirectXを推すことになったため、Windows公式のOpenGL実装は1.xのまま進化しなかった。まぁ最近はMesaへのコントリビュートによってOpenGL ESとかも無くは無いという状況にはなっているものの。。

https://zenn.dev/okuoku/scraps/d7ca136dda0f14

このOpenGL1.1実装はWindows95版も出ている。(OSR2でこのOpenGLと↑のスクリーンセーバーが両方同梱された)

okuokuokuoku

TinyGL

https://bellard.org/TinyGL/

QemuやQuickJS、FFmpegで著名なFabrice Bellard によるソフトウェアラスタライザ。何でもやってんな。。去年に 20年ぶり のアップデートが投稿され、ライセンスがMITに変わった。(従来はzlib)

いくつかこれを元にしたライブラリもある。

内容的にはOpenGLのサブセットであり、例えばfogが無い、テクスチャは256x256に固定。

okuokuokuoku

Mac

全然資料が無い。。そもそもRetro68 https://github.com/autc04/Retro68 は基本的なAPIしかカバーしてないからOpenGL SDKから探してくる必要があるけど、MacOS 9のOpenGLってSDL1のAGLくらいしか使ってるところを見たことが無い。。

iMac https://ja.wikipedia.org/wiki/IMac がRAGE(Radeonの1世代前)を搭載していて当時からOpenGLに対応していた記憶があるんだけど定かではない。

Apple は 1999 年 1 月に SGI より OpenGL のライセンスを取得し、OpenGL を正式にサポートすることを発表した。Apple は Conix Graphics 社製の OpenGL for Macintosh の権利を技術者ごと買収し、完成度を高めたり、チューニング作業を行ってきた。その後、1999 年 5 月、MacOS 用 OpenGL の正式版がリリースされた。

そうだったのか。。MacGlide上のMesaは記憶にあるな。。 http://web.archive.org/web/20010605024707/http://www.mesa3d.org/mac/