是否可以在仍然写入另一个绘制缓冲区的同时丢弃一个绘制缓冲区?

问题描述

用例与Alpha Blending with Integer Texture for Object Picking

基本相同

答案之一是丢弃未通过 alpha 测试的片段。

所以我想知道是否可以为帧缓冲区中的一个渲染目标 discard,同时仍然写入其他渲染目标。在我最初尝试不为该目标写入 out 值时,它似乎仍然写入认值(0uvec4(0) 等)

解决方法

不,如果您 discard 则不会更新任何缓冲区,无论您是否事先分配给输出变量。

discard 关键字仅允许在片段着色器中使用。它可以在片段着色器中使用以放弃对当前片段的操作。此关键字会导致片段被丢弃,并且不会更新任何缓冲区

The OpenGL ES Shading Language Specification,Page 58(PDF 中的第 64 页)

(强调我的)

如果启用了混合,那么您可以将透明颜色写入要“丢弃”的输出。

// discard;
out = vec4(0.0,0.0,0.0);