Answers:
这是硬件限制。片段着色器是可编程管线的一部分,但是与目标缓冲区的最终颜色混合此时无法在广泛使用的/商品硬件中进行编程(可以通过混合状态进行配置,但是您不能编写任意颜色替换GPU内置混合操作的代码)。
未为此构建硬件的原因可能与GPU大规模并行有关。他们一次处理许多碎片。这些片段中的某些片段最终可能会在目标缓冲区中相互交互,但是由于片段处理的异步特性,直到片段被处理并且发出最终颜色之后,才知道该怎么做...并非总是确定性地发生。
仅仅因为像素A将在最后一帧中位于像素B的后面,并不意味着像素A将始终完成片段处理并在B之前写入目标,特别是在多个渲染帧中。因此,在处理像素B的过程中从目标缓冲区读取的值将不会始终是像素A的值-有时将是清晰的值。
因此,我怀疑在片段阶段禁止直接目标缓冲区读取与阻止着色器程序员通过从读取结果中获得潜在的不确定性结果而使自己陷入困境相比,远比使混合阶段完全实现时的任何实际技术限制要重要得多。可编程的。通过严格控制读取操作(例如深度测试),GPU确保使用读取值完成的操作具有某种意义。
也就是说,可能还会有成本/收益方面的事情。使GPU流水线的这一方面可编程可在某种程度上使芯片设计复杂化,并且与其他功能相比,目标缓冲区读取的需求/需求相对较低。