2009-11-14 86 views
9

讀GLSL 1.40規範:片段着色:輸出變量

片段輸出只能是浮動, 浮點矢量,符號或 無符號整數或整數矢量, 或任何這些陣列。矩陣和 結構不能輸出。片段 輸出被聲明爲 下面的例子:

出vec4 FragmentColor; out uint亮度;

將片段顏色定義爲寫入gl_FragColor ...是不是正確?有人可以清楚我對這些輸出的想法嗎?我可以只寫一個例子的'FragmentColor'來確定片段顏色嗎?我可以讀回他們(例如'亮度')嗎?

回答

4

你舉的例子有2個輸出。它們在GLSL程序鏈接後有相應的FBO插槽。您可以使用glBindFragDataLocation重定向它們。

一旦你激活了着色器和綁定FBO,這一切都取決於平局口罩,由glDrawBuffers設置。例如,如果您通過GL_COLOR_ATTACHMENT0GL_COLOR_ATTACHMENT2那裏,這將意味着,產出指數0必去的附件0,產出指數1會去附色2

0

我想舉一些例子:

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; 
} 
16

全局輸出變量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提供了相關信息。無論如何,也許你從我的文本中得到了一些東西。