在DirectX 9中,每个绘制调用的像素着色器是否可以运行多次?

时间:2013-03-18 19:28:35

标签: graphics direct3d directx-9 pixel-shader

如果我在同一个绘制调用中有多个重叠三角形,那么每个像素为每个像素输入一次像素着色器吗?或者首先执行深度测试,并且每个像素只输入一次着色器,无论基元的数量是多少?

我在DirectX 9中工作并使用着色器模型4.0级别9_1。

谢谢!

1 个答案:

答案 0 :(得分:1)

在像素着色器之后进行深度测试。请参阅this question

此外,很清楚像素着色器每个像素运行多次。考虑alpha混合:必须首先渲染不透明像素,然后将透明像素与已渲染的不透明像素混合。如果每个像素仅输入一次像素着色器,则永远不会发生这种情况。

“每个原语一次”不是正确的术语。单个图元最可能覆盖多个像素,因此单个图元将导致像素着色器针对图元所覆盖的每个像素运行。

要防止像素着色器在被其他对象遮挡的基元上运行,您必须实现某种形式的occlusion culling。或者,某些驱动程序可能会在一定程度上为您执行此操作。请参阅下面的this link和评论。