Open5

C-LegacyGL: ANGLEのGLES1Shaders.incを眺める会

okuokuokuoku

だいたいWindowsNTのOpenGL1.0くらいの仕様で良いかなと思ったけど、結構良いスペックしてんだよな。。

----------------------------------------------------
toglinfo : Version 1.01  T.Teranishi
----------------------------------------------------
GL_VERSION:    1.01
GL_RENDERER:   GDI Generic
GL_VENDOR:     Microsoft Corporation
GL_EXTENSIONS: GL_EXT_vertex_array GL_WIN_swap_hint
----------------------------------------------------
GL_MAX_ATTRIB_STACK_DEPTH:     16
GL_MAX_CLIP_PLANES:            6
GL_MAX_EVAL_ORDER:             30
GL_MAX_LIGHTS:                 8
GL_MAX_LIST_NESTING:           64
GL_MAX_MODELVIEW_STACK_DEPTH:  32
GL_MAX_NAME_STACK_DEPTH:       128
GL_MAX_PIXEL_MAP_TABLE:        65536
GL_MAX_PROJECTION_STACK_DEPTH: 10
GL_MAX_TEXTURE_SIZE:           1024
GL_MAX_TEXTURE_STACK_DEPTH:    10
GL_MAX_VIEWPORT_DIMS:          4096 4096
----------------------------------------------------
GL_SUBPIXEL_BITS:              3
GL_POINT_SIZE_RANGE:           0.500000 10.000000
GL_POINT_GRANULARITY:          0.125000
GL_LINE_WIDTH_RANGE:           0.500000 10.000000
GL_LINE_WIDTH_GRANULARITY:     0.125000
----------------------------------------------------

というか日立GIGALIZEとかあったな。。

というわけで、ANGLEのGLES1実装のシェーダー https://github.com/google/angle/blob/main/src/libANGLE/GLES1Shaders.inc を眺めつつ、どこを削れるのかを考える。シリアスなOpenGL ES1実装を作りたいのではなくて、あくまでWinNTとかGLIDEみたいな過去の3Dハードウェアでも動作するglueとしてC-WebGLを活用する方向性を考えたい(要は既存のアプリが存在しないのでやりたい放題)。

okuokuokuoku

アトリビュート

数が少いんで、まずアトリビュートから。

頂点アトリビュート

in vec4 pos;
in vec3 normal;
in mediump vec4 color;
in float pointsize;
in mediump vec4 texcoord0;
in mediump vec4 texcoord1;
in mediump vec4 texcoord2;
in mediump vec4 texcoord3;

対応するvaryingもある。また、flat shadingのサポートのために color_varying_flat もある。

flat out mediump vec4 color_varying_flat;

... まぁ常識的な内容しかないな。。

削れるとしたら pointsize だろうか。そもそもpointsizeはGPUによってサイズが違うから使いづらいんだよな。。

フラグメントシェーダ出力

out mediump vec4 frag_color;

... 普通。

okuokuokuoku

Uniform類

Uniformはいくつかのセクションに分けられている。

(一般)

https://github.com/google/angle/blob/69f5e9ca60cd6adfecd9eb8c969beeec30a4813d/src/libANGLE/GLES1Shaders.inc#L93-L96

普通。Model view行列の逆行列って明示的に居るの。。?法線の導出に使っているようだ。

Point rasterization

https://github.com/google/angle/blob/69f5e9ca60cd6adfecd9eb8c969beeec30a4813d/src/libANGLE/GLES1Shaders.inc#L98-L102

いらない。

ライティング

https://github.com/google/angle/blob/69f5e9ca60cd6adfecd9eb8c969beeec30a4813d/src/libANGLE/GLES1Shaders.inc#L104-L123

ライティング関連はたぶん実装した方が良いよな。。

GL_OES_draw_texture

... って何だよ。。

https://github.com/google/angle/blob/69f5e9ca60cd6adfecd9eb8c969beeec30a4813d/src/libANGLE/GLES1Shaders.inc#L125-L129

矩形を描画するための拡張があるのか。まぁ無くて良いな。

okuokuokuoku

あまり数は無い

ライティング と テクスチャに分けてそれぞれESSL1で実装していって必要なパラメタを規定していくのが良いかな。固定パイプラインのライティングモデルって全然理解してなくて、特にtwo sided lightingとかどうしたもんか。。

... ってANGLEのソース探しても light_model_two_sided を実装している箇所がみあたらない。。