Opengl 仅深度FBO和片段着色器之间的关系
我一直在想,当为片段着色器部分绑定仅深度FBO(仅附加Opengl 仅深度FBO和片段着色器之间的关系,opengl,shader,fragment-shader,fbo,depth-buffer,Opengl,Shader,Fragment Shader,Fbo,Depth Buffer,我一直在想,当为片段着色器部分绑定仅深度FBO(仅附加GL\u depth\u附件并调用glDrawBuffer(GL\u NONE)时会发生什么。因为任何颜色都会被丢弃: OpenGL是否只是以常规方式处理顶点,调用光栅化器,为光栅化片段应用片段着色器,但放弃任何结果 或者它会做更聪明的事情,比如处理顶点直到可选的几何体着色器,然后剪切片段着色器部分并使用虚拟片段着色器以丢弃无用的颜色计算 由于供应商的实现细节,我想可能会有所不同,但我想对这个主题有一个更好的了解。我读到(尽管从未亲自测试
GL\u depth\u附件
并调用glDrawBuffer(GL\u NONE)
时会发生什么。因为任何颜色都会被丢弃:
- OpenGL是否只是以常规方式处理顶点,调用光栅化器,为光栅化片段应用片段着色器,但放弃任何结果
- 或者它会做更聪明的事情,比如处理顶点直到可选的几何体着色器,然后剪切片段着色器部分并使用虚拟片段着色器以丢弃无用的颜色计算
因此,建议您……不要这样做,而是始终使用颜色缓冲区,即使您不使用它。根据我的经验,片段着色器即使没有输出也会运行。例如,可以使用“放弃”(discard)来使用穿透alpha纹理绘制阴影贴图 如果它确实有输出(或者更多的输出被绑定),那么它们应该被忽略。我可以想象,如果片段着色器不包含任何discard语句,智能驱动程序可以轻松地完全跳过片段着色器 还可以查看单独的着色器对象()。它允许您手动禁用阶段