我一直想知道在片段着色器部分绑定仅深度FBO(仅GL_DEPTH_ATTACHMENT
附加且glDrawBuffer(GL_NONE)
被调用)时会发生什么。因为任何颜色都被丢弃了:
由于供应商实施的详细信息,我想它可能会有所不同,但我想对该主题有更好的了解。
答案 0 :(得分:1)
根据我的经验,片段着色器即使没有输出也仍会运行。例如,这可以用于使用丢弃来绘制具有穿透式alpha纹理的阴影贴图。
如果它确实有输出(或者更多输出然后被绑定),那么它们应该被忽略。我想如果一个智能驱动程序不包含任何丢弃语句,就可以轻松地完全跳过片段着色器。
也许可以查看单独的着色器对象(https://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt)。它允许您手动禁用阶段。
答案 1 :(得分:0)
我已经读过(虽然从未亲自测试过)完全没有颜色缓冲区导致奇怪的未定义行为,因为OpenGL实现每个人都不得不反过来问这个问题:“什么/应该/我们让它做什么时候没有颜色缓冲?“并且没有官方的,常用的跨所有实现答案。
官方文件小心避免一般性地提及这种情况。
因此,建议你只是......不要这样做,而是总是有一个颜色缓冲区,即使你不使用它。