lördag, november 29, 2008

Rendering i WPF

När det gäller rendering av grafik i WPF pratar man om att den sker i olika lager, eller tiers. Ett tier definieras av vilka möjligheter och vilken prestanda grafikhårdvaran har på den dator som kör applikationen och desto högre tier man kör på desto bättre prestanda får man. WPF har tre olika Tiers.

Tier 0: På tier 0 har man ingen hårdvaruacceleration utan all rendering utförs av mjukvaran och exekveras på datorns CPU. Man hamnar på tier 0 om man har en DirectX-version lägre än 7.0.

Tier 1: På tier 1 har man delvis tillgång till hårdvaruacceleration. Minnet på grafikkortet måste vara +30MB och versionen av DirectX är större än 7.0 och mindre än 9.0.

Tier 2: Här har man hårdvaruacceleration på alla element som har stöd för hårdvarurendering. T ex så dök det upp stöd för hårdvarurendering av bitmap effects som Blur och DropShadow. För att komma upp i tier 2 måste man ha DirectX-version som är högre än 9.0, minst 120MB grafikminne samt lite andra grejer.

DirectX

Den senaste version av DirectX för XP är nio och Microsoft har sagt att de bara kommer att släppa DirectX 10 för Vista (och senare). Det finns en version av DirectX 10 för XP men den är inte från Microsoft. Vilken version som körs av DirectX får man enklast fram genom att köra dxdiag från en commandopromt.

RenderCapability

För att ta reda på vilket tier man exekverar på kan man använda sig av RenderCapability.Tier. Den returnerar en Int32 som man får göra en right-shift-operation på för att få reda på vilket tier den motsvarar.

RenderCapability.Tier returnerar följande för respektive lager:

Tier 0: 0

Tier 1: 65536

Tier 2: 131072

och koden för att göra en right-shift är:

var tier = (RenderCapability.Tier >> 16).ToString();


Microsoft har en bra beskrivning av vad som skiljer de olika lagren på http://msdn.microsoft.com/en-us/library/ms742196.aspx

Inga kommentarer: