我目前正在使用着色器(3.3)學習OpenGL。有一件事我似乎無法解決。我讀過使用內置變量如gl_Position和gl_FragCoords在OpenGL 3 +中不推薦使用,因此我想使用自己的輸出變量。GLSL - 使用自定義輸出屬性代替gl_Position
因此,不是這樣的:
#version 330\n
layout(location=0) in vec2 i_position;
out vec4 o_position;
void main()
{
gl_Position = vec4(i_position, 0.0, 1.0);
};
我寫了這個:
#version 330\n
layout(location=0) in vec2 i_position;
out vec4 o_position;
void main()
{
o_position = vec4(i_position, 0.0, 1.0);
};
着色器編譯沒有在這兩種情況下的問題,但第二個代碼只產生空白屏幕。我是否需要以某種方式指定哪個變量是輸出變量?
這些[內置變量](http://www.opengl.org/wiki/Built-in_Variable_(GLSL))都不推薦使用。在覈心配置文件(兼容性配置文件)之前,有一些內置函數反映了固定的管道屬性,例如'gl_Color','gl_Normal'等。 –
哦,我很抱歉。我讀過一些'gl_ *'變量已被棄用,並認爲它們都是。謝謝你的澄清。無論如何,我如何使它與自定義輸出變量一起工作?或者你只是使用gl_Position屬性來設置頂點位置? – michy04
你必須仍然使用'gl_Position'。該變量是特殊的,因爲它指定了頂點和片段着色器之間由固定功能塊使用的座標(裁剪,光柵化等)。你不能用你定義的變量替換它。除了@BrettHale已經提到的例子之外,'gl_FragColor',它曾經是**片段**着色器的預定義輸出,也被棄用。 –