Jednou z mála neveřejných vlastností ZPS 10 je přítomnost filtru umožňujícího zpracování obrazu prostřednictvím pixel shaderů na grafické kartě. Bohužel, tento filtr byl určen jen pro potřeby vývoje a proto je velice strohý a některé parametry má fixně nastavené. Pracuje s pixel shadery 2.0 a hardwarovou akceleraci má povolenu jen pro 24 bitové obrázky, protože ovladače některých grafických karet jsou v 48mi bitovém režimu schopny shodit OS do modré. Vstupní programy přijímá v HLSL a nevypisuje žádné zprávy, tedy nedozvíte se, kde je ve vašem kódu chyba. Jeho použití také omezuje skutečnost, že obraz zpracovává po nepřekrývajících se částech. Všechna tato omezení ho degradují spíše na hračku, ale třeba někomu bude informace o jeho přítomnosti k něčemu dobrá.
Jak se k tomuto filtru dostanete? Spusťte si hromadný filtr, v něm stiskněte současně klávesy Cltr a Shift a s těmito stisknutými klávesmi klikněte na zelené tlačítko se symbolem plus pro přidání dalšího filtru do seznamu. V nabídce se za Uživatelským filtrem objeví další filtr bez ikony označený jako Pixel Shader. Tento si zvolte a nyní už nezbývá nic jiného než vložit do něj svůj program.
Tímto kouskem kódu převedete obrázek na odstíny šedi
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);
float4 main(float2 tex : TEXCOORD0) : COLOR
{
float c0 = dot(tex2D(s0, tex), float4(0.299, 0.587, 0.114, 0));
return c0;
}
a tímto krátkým programem můžete obrázek pro změnu invertovat:
sampler s0 : register(s0);
float4 p0 : register(c0);
float4 p1 : register(c1);
float4 main(float2 tex : TEXCOORD0) : COLOR
{
float4 c0 = float4(1, 1, 1, 1) - tex2D(s0, tex);
return c0;
}
Možná se vám bude ještě hodit informace o některých dostupných konstantách
| p0[0] | šířka zpracovávané části obrazu |
| p0[1] | výška zpracovávané části obrazu |
| p0[2] | šířka celého obrázku |
| p0[3] | výška celého obrázku |
| p1[0] | levý okraj zpracovávané části |
| p1[1] | horní okraj |
| p1[2] | pravý okraj |
| p1[3] | spodní okraj |