OpenGL SuperBible を読んでいるときに、最も基本的な (フラットな) シェーダーの例の 1 行を理解するのに問題があります。
第 6 章のリスト 6.4 と 6.5 では、次の 2 つの非常に基本的なシェーダーが紹介されています。
6.4頂点シェーダー:
// Flat Shader
// Vertex Shader
// Richard S. Wright Jr.
// OpenGL SuperBible
#version 130
// Transformation Matrix
uniform mat4 mvpMatrix;
// Incoming per vertex
in vec4 vVertex;
void main(void)
{
// This is pretty much it, transform the geometry
gl_Position = mvpMatrix * vVertex;
}
6.5フラグメント シェーダー:
// Flat Shader
// Fragment Shader
// Richard S. Wright Jr.
// OpenGL SuperBible
#version 130
// Make geometry solid
uniform vec4 vColorValue;
// Output fragment color
out vec4 vFragColor;
void main(void)
{
gl_FragColor = vColorValue;
}
私の混乱は、main() でvFragColor
言いながら out 宣言で言うことです。gl_FragColor
一方、ウェブサイトのコードでは、「vFragColor = vColorValue;」に修正されています。メインループで。
私の質問は、本のタイプミス以外に、out
シェーダーの値に名前を付けるためのルールは何ですか? 特定の名前に従う必要がありますか?
OpenGL.org で、頂点シェーダーの外側には gl_Position が必要であることがわかりました。フラグメントシェーダーにそのようなものはありますか? それとも、出力が1つしかない場合、それはバッファ内の色になりますか?
フラグメント シェーダーに複数のシェーダーがある場合はどうなりますか? GLSL コンパイラは、バッファで使用するものをどのように認識しますか?