WebGL2:将片段深度写入深度纹理

时间:2017-04-20 14:58:18

标签: shader fragment-shader webgl2

我在WebGL2中使用了一个简单的片段着色器,它将不同的颜色输出到两个不同的纹理目标中。如何将gl_fragDepth值写入第三(深度)纹理目标(位置= 2)?

#version 300 es
precision mediump float;

layout(location = 0) out vec4 fragColor1;
layout(location = 1) out vec4 fragColor2;

void main(void) {
   fragColor1 = vec4(1.0, 0.0, 0.0, 1.0); // printf of WebGL :)
   fragColor2 = vec4(1.0, 0.0, 0.0, 1.0);
}

2 个答案:

答案 0 :(得分:2)

每个片段只能输出一个真正的深度值,但听起来你还没有这样做,所以你需要做的就是将一个DEPTH_ATTACHMENT附加到帧缓冲区并写入片段着色器中的gl_FragDepth。

答案 1 :(得分:1)

事实证明就像

一样简单
 layout (location = 2) out float fragDepth;
 ...
 fragDepth = gl_FragCoord.z;