【发布时间】:2014-07-17 15:10:32
【问题描述】:
我似乎无法在任何地方找到明确的答案,所以也许这里有人可以提供帮助。我正在为 Direct3D 11 构建一个顶点着色器(HLSL Shader Model 4.1),为了减少我需要执行的绘制调用的数量,我希望这个着色器根据一个标志执行两个分支中的一个。
伪代码:
if (flag)
calculate corners of axis aligned quad
else
calculate corners of rotated quad
end if
我一直在读到着色器执行两个分支并在之后选择适当的结果(这意味着它的成本很高,而且使用两个不同的着色器(以及更多的绘制调用)可能会更好),但这在较新的着色器中可能会有所不同模型(仅执行相关分支,这意味着我几乎可以免费获得灵活性)。 Shader Model 4.1 是什么情况?
当涉及到像素着色器时,显然每个像素组都会执行分支(这可能会影响执行的分支),但是在顶点着色器中这将如何工作?
【问题讨论】:
-
Afaik 你可以选择 if 的“模式”,可以是动态的,也可以同时执行:msdn.microsoft.com/en-us/library/windows/desktop/…
-
@Gnietschow 这已经逃过了我。感谢您的提醒 - 我会仔细看看。
标签: shader direct3d hlsl vertex-shader direct3d11