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