题
读GLSL 1.40规格:
片段输出只能是浮动, 浮点矢量,符号或 无符号整数或整数载体, 或任何这些阵列。矩阵和 结构不能输出。分段 输出被声明为在 下面的例子:
出vec4 FragmentColor; 出UINT光度;
在片段颜色被定义写gl_FragColor ...是不是有人可能清除这些输出我的想法?我可以只写例子“FragmentColor”确定片段颜色?可予读回他们(“光度”例如)?
解决方案
您例子具有2个输出。他们有GLSL程序联后相关的对应FBO插槽。您可以使用glBindFragDataLocation
重定向他们。
一旦激活所述着色器和结合FBO,这一切取决于平局掩模,通过glDrawBuffers
设置。例如,如果你通过GL_COLOR_ATTACHMENT0
和GL_COLOR_ATTACHMENT2
那里,这将意味着,输出索引0将去附着0,并且输出索引1会去色附件2。
其他提示
全局输出变量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的相关信息。无论如何,也许你得到的东西从我的文字太。的
我想给一些例子:
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;
}
不隶属于 StackOverflow