Per iniziare con la mia domanda principale:Pixel Shader modello> 2.0 in FireMonkey
Posso usare pixel shader model 3, 4 o 5 nelle mie applicazioni FireMonkey?
Desidero essere in grado di creare dinamicamente pixel shader nel mio programma FireMonkey. Per fare ciò, compilo un pixel shader usando fxc.exe fornito con DirectX SDK e carica il codice compilato nel mio discendente TShaderFilter. Funziona bene (fammi sapere se sei interessato a come lo faccio).
Tuttavia, riesco a far funzionare le cose solo se compilo con ps_2_0
come profilo di destinazione.
Attualmente sto correndo nei limiti dello shader modello 2.0. Ad esempio, i loop sembrano essere srotolati dal compilatore e c'è un numero massimo di istruzioni che è possibile avere in shader di livello 2. Per questo motivo, il numero di possibilità è piuttosto limitato.
Esempio: Il codice dello shader di seguito crea un frattale di Mandelbrot. Se imposto troppo alto Iterations
, non viene compilato. Messaggio di errore:
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;
}
Con shader model ps_3_0 posso compilare con più iterazioni, ma lo shader compilato non sembra funzionare in FireMonkey. Non ricevo alcun messaggio di errore; Ho appena ottenuto un'immagine rossa come risultato.
Qualcuno qui ha qualche idea su come aggirare il problema, o è FireMonkey semplicemente non in grado di utilizzare tutto il potenziale della mia scheda grafica?
Nota, ho visto che il requisito minimo per FireMonkey è una scheda grafica con livello di shader 2.0, ma non è chiaro se ciò significa che non è possibile utilizzare lo shader di livello 3 o superiore.
+1, domanda interessante! Sarei interessato a leggere come stai compilando e usando anche gli shader. –