2.0要开始与我的主要问题:像素着色器模型>在FireMonkey
我可以使用像素着色器模型3,4或5我的FireMonkey应用程序?
我希望能够在我的FireMonkey程序中动态创建像素着色器。 为此,我现在使用DirectX SDK附带的fxc.exe编译像素着色器,并将编译的代码加载到我的TShaderFilter后代中。这工作正常(让我知道如果你对我是如何做到这一点感兴趣的话)。
但是,如果我使用ps_2_0
作为目标配置文件进行编译,我只能使其工作。
我目前遇到着色器模型2.0的限制。例如,循环似乎被编译器展开,并且您可以在2级着色器中使用最多数量的指令。因此,可能性的数量相当有限。
实施例: 下面的着色器代码创建一个曼德尔布罗分形。如果我设置Iterations
太高,它不会编译。错误信息:
error X5608: Compiled shader code uses too many arithmetic instruction slots (78). Max. allowed by the target (ps_2_0) is 64.
#define Iterations 12
float2 Pan;
float Zoom;
float Aspect;
float4 main(float2 texCoord : TEXCOORD0) : COLOR0
{
float2 c = (texCoord - 0.5) * Zoom * float2(1, Aspect) - Pan;
float2 v = 0;
for (int n = 0; n < Iterations; n++)
{
v = float2(v.x * v.x - v.y * v.y, v.x * v.y * 2) + c;
}
return (dot(v, v) > 1) ? 1 : 0;
}
的Shader Model ps_3_0我可以用更多的迭代编译,但编译着色器似乎并不FireMonkey工作。我没有收到任何错误消息;结果我只是得到一张红色的图像。
是否有人在这里有关于如何解决这个问题的任何想法,或者是FireMonkey只是不能够利用我的显卡的全部潜能?
请注意,我已经看到FireMonkey的最低要求是具有着色器级别2.0的图形卡,但尚不清楚这是否意味着您无法使用着色器级别3或更高级别。
+1,有趣的问题!我也有兴趣阅读你如何编译和使用着色器。 – 2012-04-16 09:05:52