GLSL:gl_ではじまる組み込み変数まとめ

glsl-variable.png

頂点シェーダ

頂点シェーダだけで使うことが可能。
読み込み専用である。(attribute変数に対して何か代入しようとしたらエラーになる。)

頂点シェーダ用 OpenGL OpenGL ES cppでの関連 配列の場合
gl_Vertex glVertex()
gl_Color glColor() glColorPointer()
gl_TexCoord glTexCoord() glTexCoordPointer()
gl_SecondaryColor glSecondaryColor
gl_Normal glNormal glNormalPointer()
gl_MultitexCoordn glMultiTexCoord(n,)
gl_FogCoord glFogCoord

これは不確か

フラグメントシェーダ

OpenGL OpenGL ES type 意味
gl_FragCoord vec4 ウィンドウ座標での位置。
gl_FrontFacing
gl_PointCoord
gl_Color glColor()
gl_SecondaryColor
gl_TexCoord
gl_FogFragCoord
gl_PointCoord1 vec2 点の中での相対位置
gl_FrontColor プロファイルによりけり

gl_TexCorrdは頂点シェーダの時とちがって、補間されたなめらかな値が来ます
アトリビュート変数以外の組み込み変数

組み込みのUniform変数

行列

uniform変数なので頂点シェーダ、フラグメントシェーダ、両方から使うことができる。
gl_ModelViewMatrix 現在のモデルビュー行列
gl_ProjectionMatrix 現在の投影行列
gl_ModelViewProjectionMatrix 現在のモデルビュー行列と投影行列をかけ算したもの
gl_TextureMatrix
gl_ModelViewMatrixInverse
gl_ModelViewMatrixTranspose
gl_ModelViewProjectionMatrixInverseTranspose
gl_NormalMatrix 法線にこれをかけないと、光の位置がローカル座標と同じになってしまう
gl_ProjectionMatrixInverse
gl_ModelViewProjectionMatrixInverse
gl_TextureMatrixInverse[gl_MaxTextureCoords]
gl_ProjectionMatrixTranspose
gl_TextureMatrixTranspose[gl_MaxTextureCoords]
gl_ProjectionMatrixInverseTranspose
gl_TextureMatrixInverseTranspose[gl_MaxTextureCoords]

その他

  • uniform float gl_NormalScale;
  • uniform vec4 gl_ClipPlane[gl_MaxClipPlanes];
struct gl_PointParameters {
 float size;
 float sizeMin;
 float sizeMax;
 float fadeThresholdSize;
 float distanceConstantAttenuation;
 float distanceLinearAttenuation;
 float distanceQuadraticAttenuation;
};

uniform gl_PointParameters gl_Point;
struct gl_MaterialParameters {
 vec4 emission; // Ecm
 vec4 ambient; // Acm
 vec4 diffuse; // Dcm
 vec4 specular; // Scm
 float shininess; // Srm
};

uniform gl_MaterialParameters gl_FrontMaterial;
uniform gl_MaterialParameters gl_BackMaterial;
struct gl_LightSourceParameters {
 vec4 ambient; // Acli
 vec4 diffuse; // Dcli
 vec4 specular; // Scli
 vec4 position; // Ppli
 vec4 halfVector; // Derived: Hi
 vec3 spotDirection; // Sdli
 float spotExponent; // Srli
 float spotCutoff; // Crli
 // (range: [0.0,90.0], 180.0)
 float spotCosCutoff; // Derived: cos(Crli)
 // (range: [1.0,0.0],-1.0)
 float constantAttenuation; // K0
 float linearAttenuation; // K1
 float quadraticAttenuation;// K2
};
 
uniform gl_LightSourceParameters gl_LightSource[gl_MaxLights];
struct gl_LightModelParameters {
 vec4 ambient; // Acs
};

uniform gl_LightModelParameters gl_LightModel;
struct gl_LightModelProducts {
 vec4 sceneColor; // Derived. Ecm + Acm * Acs
};

uniform gl_LightModelProducts gl_FrontLightModelProduct;
uniform gl_LightModelProducts gl_BackLightModelProduct;
struct gl_LightProducts {
vec4 ambient; // Acm * Acli
vec4 diffuse; // Dcm * Dcli
vec4 specular; // Scm * Scli
};
uniform gl_LightProducts gl_FrontLightProduct[gl_MaxLights];
uniform gl_LightProducts gl_BackLightProduct[gl_MaxLights];
uniform vec4 gl_TextureEnvColor[gl_MaxTextureUnits];
uniform vec4 gl_EyePlaneS[gl_MaxTextureCoords];
uniform vec4 gl_EyePlaneT[gl_MaxTextureCoords];
uniform vec4 gl_EyePlaneR[gl_MaxTextureCoords];
uniform vec4 gl_EyePlaneQ[gl_MaxTextureCoords];
uniform vec4 gl_ObjectPlaneS[gl_MaxTextureCoords];
uniform vec4 gl_ObjectPlaneT[gl_MaxTextureCoords];
uniform vec4 gl_ObjectPlaneR[gl_MaxTextureCoords];
uniform vec4 gl_ObjectPlaneQ[gl_MaxTextureCoords];
struct gl_FogParameters {
 vec4 color;
 float density;
 float start;
 float end;
 float scale; // Derived: 1.0 / (end - start)
};

uniform gl_FogParameters gl_Fog;

TexCoord0

glTexCoord2i()とかで来るやつのことかなぁ?
glActiveTexture(GL_TEXTURE0);
が必要なのかも。

参考にした本

undone

いくつかcompatibility profile onlyというのがあるなんだろう。

ウィンドウ座標

struct gl_DepthRangeParameters{
    highp float near;
    highp float far;
    highp float diff;//far-near
}
uniform gl_DepthRangeParameters gl_DepthRange;
Bibliography

サポートサイト Wikidot.com