讀GLSL 1.40規範:片段着色:輸出變量
片段輸出只能是浮動, 浮點矢量,符號或 無符號整數或整數矢量, 或任何這些陣列。矩陣和 結構不能輸出。片段 輸出被聲明爲 下面的例子:
出vec4 FragmentColor; out uint亮度;
將片段顏色定義爲寫入gl_FragColor ...是不是正確?有人可以清楚我對這些輸出的想法嗎?我可以只寫一個例子的'FragmentColor'來確定片段顏色嗎?我可以讀回他們(例如'亮度')嗎?
讀GLSL 1.40規範:片段着色:輸出變量
片段輸出只能是浮動, 浮點矢量,符號或 無符號整數或整數矢量, 或任何這些陣列。矩陣和 結構不能輸出。片段 輸出被聲明爲 下面的例子:
出vec4 FragmentColor; out uint亮度;
將片段顏色定義爲寫入gl_FragColor ...是不是正確?有人可以清楚我對這些輸出的想法嗎?我可以只寫一個例子的'FragmentColor'來確定片段顏色嗎?我可以讀回他們(例如'亮度')嗎?
你舉的例子有2個輸出。它們在GLSL程序鏈接後有相應的FBO插槽。您可以使用glBindFragDataLocation
重定向它們。
一旦你激活了着色器和綁定FBO,這一切都取決於平局口罩,由glDrawBuffers
設置。例如,如果您通過GL_COLOR_ATTACHMENT0
和GL_COLOR_ATTACHMENT2
那裏,這將意味着,產出指數0必去的附件0,產出指數1會去附色2
我想舉一些例子:
void add(in float a, in float b, out float c)
{
//you can not use c here. only set value
//changing values of a and b does not change anything.
c = a + b;
}
void getColor(out float r, out float g, out float b)
{
//you can not use r, g, b here. only set value
r = gl_FragColor.r;
g = gl_FragColor.g;
b = gl_FragColor.b;
}
void amplify(inout vec4 pixelColor, in value)
{
//inout is like a reference
pixelColor = pixelColor * value;
}
全局輸出變量gl_FragColor是GLSL後棄用版本120. 現在你必須自己給它一個名字和類型,就像你的例子。 關於幾個輸出, 此鏈接給你的信息有關的映射:http://www.opengl.org/wiki/GLSL_Objects#Program_linking
(而且我發現鏈接:http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=270999)
希望這有助於! :d
哎呀!我看到kvark提供了相關信息。無論如何,也許你從我的文本中得到了一些東西。