Shader双输出反馈问题:双输出回喂Shader迭代计算方案
双通道Shader输出回喂迭代的问题解决
我最近碰到这么个情况:想让Shader输出两个通道的数据,把这两个输出回喂回Shader里,分别用作迭代器和累加器。单通道的时候这套逻辑跑起来毫无问题,但换成双通道就出状况了。
原Shader代码
片段Shader
#version 420 uniform sampler2DRect inData0; uniform sampler2DRect inData1; out float outData0; out float outData1; void main(void) { outData0 = 1 + texture(inData0, gl_FragCoord.xy).r; outData1 = -1 + texture(inData1, gl_FragCoord.xy).r; }
顶点Shader
#version 420 in vec2 position; void main() { gl_Position = vec4(position, 0, 1); }
前期进展
当时已经能通过GL.DrawBuffers和GL.ReadBuffer正确获取双输出了,但核心需求——实现output1回喂至input1的迭代逻辑一直没跑通。测试阶段用的是R32f/Red格式,后续计划替换成vec4。
解决方法
给uniform采样器和输出变量明确指定layout绑定与位置后,问题就顺利解决了。调整后的关键代码片段如下:
layout(binding = 0) uniform sampler2DRect inData0; layout(binding = 1) uniform sampler2DRect inData1; layout(location = 0) out float outData0; layout(location = 1) out float outData1;
内容的提问来源于stack exchange,提问作者Tord
相关产品推荐
相关产品推荐

