2009-11-14 84 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提供了相关信息。无论如何,也许你从我的文本中得到了一些东西。