没有明确设置gl_FragColor的片段着色器?

时间:2014-11-07 09:12:18

标签: opengl opengl-es glsl

是不是将gl_FragColor的任何内容定义为等同于丢弃或只是将gl_FragColor设置为vec4(0, 0, 0, 0)

(为了记录,我正在问这个,因为我正在创建只能写入gl_FragDepth的着色器,用于照明目的。)

1 个答案:

答案 0 :(得分:3)

来自GLSL 4.5 specs ...

  

使用兼容性配置文件时,片段着色器中提供了以下片段输出变量:

out vec4 gl_FragColor;
out vec4 gl_FragData[gl_MaxDrawBuffers];
  

写入gl_FragColor指定后续固定功能管道将使用的片段颜色。如果后续固定功能使用片段颜色并且片段着色器可执行文件的执行不会将值写入gl_FragColor ,则消耗的片段颜色未定义

所以不,它既不是丢弃,也不是全部为零。不同的驱动程序和视频卡可能会发生不同的事情;它是“未定义的”。

对我来说纯粹的猜测,但是当着色器返回结束作为输出时,很可能是物理寄存器中的数据。这在很大程度上取决于GPU以前做过的事情。将它全部变为黑色可能很常见,就像忽略在C中初始化int *myPointer;一样,往往最终为零,因为它恰好是RAM的初始状态。