最近のGLSLでは結構廃止になっている部分が多い。ちょっと踏んだところをメモとして残しておきます。
varying, attribute 廃止
これは割と定番ですが、最近のGLSLでは廃止になってます。
代わりに in/out を使用して、シェーダーに対する入力、出力を記述していきます。
その割に、頂点入力としては glGetAttribLocation 使用して、頂点シェーダーの in で書かれた変数を取得するなど、APIとしてはアンバランスに感じます。
textureCUBEの廃止
キューブマップからのテクセルのサンプルで textureCUBEを使用していた部分が最近のものではコンパイルエラーとなるようです。自分の環境では以下のエラーが出力されました。
error C7506: OpenGL does not define the global type textureCUBE
ではキューブマップからのフェッチはどうするのかというと、以下のような感じで良さそうです。
samplerCube gSampler1; vec3 v; texture( gSampler1, v );
どうやらtextureCubeだけが廃止扱いではないようです。続く。
texture1D廃止
texture1D, texture1DProj, texture1DLod, texture1DProjLod が廃止になっています。代わりに texture 関数を使えとのことです。
texture2D廃止
texture2D, texture2DProj, texure2DLod, texture2DProjLod が廃止になっています。代わりに texture 関数を使えとのことです。
texture3D廃止
texture3D, texture3DProj, texture3DLod, texture3DProjLod が廃止になっています。代わりに texture 関数を使えとのことです。
shadow系の廃止
shadow1D, shadow2D, shadow1DProj, shadow2DProj, shadow1DLod, shadow2DLod, shadow1DProjLod, shadow2DProjLod が廃止になっています。
デフォルトのグローバルで使えた各変数
in vec4 gl_Color; in vec4 gl_SecondaryColor; in vec3 gl_Normal; in vec4 gl_Vertex; in vec4 gl_MultiTexCoord{0-7}; in float gl_FogCoord;
これらのものが廃止扱いになっています。あまり使うことはなかったかもしれませんが、たまに使われているケースがあってこのことを知らないと悩みます。
gl_FragColor もまた廃止なので注意が必要です。