Para iniciar con mi pregunta principal:Pixel Shader model> 2.0 en FireMonkey
¿Puedo usar pixel Shader Model 3, 4 ó 5 en mis aplicaciones FireMonkey?
Quiero ser capaz de crear dinámicamente sombreadores de píxeles en mi programa FireMonkey. Para hacer eso, ahora compilo un sombreador de píxeles usando fxc.exe que viene con DirectX SDK, y cargo el código compilado en mi descendiente TShaderFilter. Eso funciona bien (avíseme si le interesa cómo lo hago).
Sin embargo, solo puedo hacer que las cosas funcionen si compilo con ps_2_0
como un perfil de destino.
Actualmente me encuentro con las limitaciones del shader model 2.0. Por ejemplo, los bucles parecen ser desenrollados por el compilador, y hay una cantidad máxima de instrucciones que puede tener en los sombreadores de nivel 2. Por eso, el número de posibilidades es bastante limitado.
Ejemplo: El código de shader a continuación crea un fractal de Mandelbrot. Si configuro Iterations
demasiado alto, no se compila. Mensaje de error:
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 el modelo de sombreado ps_3_0 puedo compilar con más iteraciones, pero el shader compilado no parece trabajar en FireMonkey. No recibo ningún mensaje de error; Acabo de obtener una imagen roja como resultado.
¿Hay alguien aquí tiene alguna idea sobre cómo evitar esto, o es simplemente no FireMonkey capaz de utilizar todo el potencial de mi tarjeta gráfica?
Nota, he visto que el requisito mínimo para FireMonkey es una tarjeta gráfica con nivel de sombreador 2.0, pero no está claro si eso significa que no puede usar el nivel de sombreado 3 o superior.
+1, pregunta interesante! También me interesaría leer cómo estás compilando y usando shaders. –