读GLSL 1.40规格:

  

片段输出只能是浮动,   浮点矢量,符号或   无符号整数或整数载体,   或任何这些阵列。矩阵和   结构不能输出。分段   输出被声明为在   下面的例子:

     

出vec4 FragmentColor;   出UINT光度;

在片段颜色被定义写gl_FragColor ...是不是有人可能清除这些输出我的想法?我可以只写例子“FragmentColor”确定片段颜色?可予读回他们(“光度”例如)?

有帮助吗?

解决方案

您例子具有2个输出。他们有GLSL程序联后相关的对应FBO插槽。您可以使用glBindFragDataLocation重定向他们。

一旦激活所述着色器和结合FBO,这一切取决于平局掩模,通过glDrawBuffers设置。例如,如果你通过GL_COLOR_ATTACHMENT0GL_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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top