當我切換到使用OpenGL ES 3 GLSL 300,我在FRAG着色器滿足以下錯誤當切換到GLSL 300,滿足以下錯誤
未聲明的標識符gl_FragColor
使用GLSL 100時,一切安好。
當我切換到使用OpenGL ES 3 GLSL 300,我在FRAG着色器滿足以下錯誤當切換到GLSL 300,滿足以下錯誤
未聲明的標識符gl_FragColor
使用GLSL 100時,一切安好。
GLSL的現代版本通過將它們聲明爲out
值來完成片段着色器輸出,並且不再支持gl_FragColor
,因此您的錯誤。試試這個:
out vec4 fragColor;
void main()
{
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
請注意,gl_FragDepth
尚未更改,仍然可用。
預定義的變量gl_FragColor
不GLSL ES 3.00不復存在。您需要爲片段着色器的輸出定義自己的out
變量。你可以使用任何你想要的名字,例如:
out vec4 FragColor;
void main() {
...
FragColor = ...;
}
這遵循完整的OpenGL的核心配置文件。沒有預定義片段着色器輸出的原因在於,它不能很好地適應多個渲染目標,並且對於需要浮點向量以外類型的渲染目標也不會很好地進行縮放。