我正在尝试在一次绘制调用中绘制两个三角形。两个三角形平行。相机的前进方向沿着这些三角形的法线,即垂直于两个三角形的法线。从相机视图来看,两个三角形完美重叠。
Alpha 混合启用,blendop 为 srcAlpha 和 invSrcAlpha。后面的三角形的颜色是(0, 1, 0, 0.5),前面的三角形的颜色是(1, 0, 0, 0.5)。 RT 被清除为黑色。像素着色器只是输出三角形颜色。
这是显示场景的图像,三角形的顶点按照图像中的方式进行索引。
RT 中的最终颜色可能是全部 (0.5, 0.25, 0)。在图形管线中,是否保证绿色三角形的像素先于红色三角形输出?
您对像素评估顺序不做任何保证,这里红色和绿色像素可以按任何顺序评估。精确地按照三角形在顶点/索引缓冲区中的排序顺序执行。
它存在一个名为“光栅化器顺序视图”的功能,文档此处。但是,首先,它取决于可选功能,其次,它只能在您使用无序访问视图时打开,而当您仅使用输出合并来写入样本时,情况并非如此。
看起来 DirectX 管道保证了顺序。
“DirectX 渲染遵循一组严格的规则,确保三角形始终按照提交的顺序进行渲染:如果两个三角形在屏幕上重叠,硬件会保证三角形 1 的颜色结果会在三角形 2 之前混合到屏幕上经过加工和混合。”
这里是链接 https://software.intel.com/en-us/gamedev/articles/rasterizer-order-views-101-a-primer,以及“DirectX Pipeline 和 UAV 的限制”部分.
它们将按照索引缓冲区中的三角形序列进行渲染。