Grafik-API:er i Windows
Windows Vista har stöd för en helt ny modell för bildskärmsdrivrutiner som representerar en större revision i utformningen av videodrivrutiner sedan introduktionen av Windows Driver Model (WDM) för Windows 98. Den här omdesignade modellen återspeglar utvecklingen av videomaskinvara från en värld av 2D-rasteråtgärder och GDI-program till 3D-spel med grafikmaskinvara med fast funktion, och slutligen till den moderna programmerbara grafikprocessorn (GPU) som stöder ett brett utbud av grafikprogram med höga prestanda. Windows 7 och Windows 8 bygger på windows Vista-grafikinfrastrukturen genom att tillhandahålla ytterligare grafikfunktioner och API:er. I den här artikeln beskrivs Windows-grafikfunktioner och API:er.
- bakgrund
- Direct3D 9
- Direct3D 9Ex
- Direct3D 10
- Direct3D 10.1
- Direct3D 11
- Direct3D 11.1
- OpenGL-
- Programkompatibilitet, GDI och äldre versioner av Direct3D
- rekommendationer
Bakgrund
Det primära API:et för programmeringsgrafik sedan windows första dagar har varit GDI (Graphical Device Interface). Det här API:et har utformats för att hantera flera 2D-utdataenheter och utgör grunden för användargränssnittsupplevelsen i Windows. DirectDraw och Direct3D introducerades som alternativa API:er för att stödja helskärmsspel och 3D-återgivning som tillägg till den befintliga maskinvaran för tiden. Interaktioner med GDI var komplicerade. Den effektiva sammanblandningen av traditionella GDI-element med Direct3D-element har begränsats av den här designen. Windows XP-versionen av WDM, som kallas XPDM, återspeglar GDI:s och Direct3D:s sida vid sida (se bild 1).
Bild 1. Grafik-API:er i Windows XP
Under årens lopp har kraften hos 3D-grafikkort ökat dramatiskt till den punkt där den stora majoriteten av maskinvaran är dedikerad till den här funktionen. En ny drivrutinsmodell, Windows Display Driver Model (WDDM), ger GPU och Direct3D i framkant, vilket gör det möjligt att skapa en helt ny upplevelse, 3D-skrivbordet, som sömlöst blandar 2D-världen av GDI med kraften i moderna programmerbara GPU:er. Med WDDM drivs videomaskinvaran helt av Direct3D, och alla andra grafikgränssnitt kommunicerar med videomaskinvaran via den nya Direct3D-centrerade drivrutinsmodellen (se bild 2).
Bild 2. Grafik-API:er i Windows Vista
Mer information om WDDM finns i designguiden WDDM (Windows Vista Display Driver Model).
Direct3D 9
Version 9 av DirectX släpptes först för Windows 2002, med efterföljande uppdateringar 2003 och 2004. Det här API:et representerar ett decennium av utveckling av DirectX-teknikerna, införandet av mer kraftfulla skuggprogrammeringsmodeller för Direct3D och en mognad som backas upp av tusentals leveranstitlar. Direct3D 9 är det primära grafikgränssnittet i Windows Vista. Det är fortfarande det idealiska API:et att använda för att skriva 3D-spel och program som måste köras på det breda utbudet av befintliga maskinvaru- och Windows-versioner. Informationen om den nya drivrutinsmodellen är dold för program som använder Direct3D 9-gränssnitten, men i bakgrunden drar operativsystemet full nytta av de nya funktionerna för att tillhandahålla verklig multitasking av GPU:n, effektivare resurshantering och robust prestanda.
För att säkerställa fullständig kompatibilitet med äldre versioner av Windows måste vissa egenheter i den gamla drivrutinsmodellen emuleras även med den nya Windows Vista-drivrutinsmodellen. När ett helskärmsprogram till exempel förlorar fokus måste det anta att det har förlorat alla resurser i videominnet (VRAM) och läst in dem som skapats som ohanterade resurser igen trots att den nya drivrutinsmodellen hanterar resurserna transparent utan att ta bort dem från enhetskontexten. Även begreppet hanterad eller standardresurstyp är specifik för den gamla drivrutinsmodellen. Ett annat exempel är förväntningarna på fel vid allokering av ohanterade resurser (standardpool) utöver mängden VRAM som är tillgängligt, även om den nya drivrutinsmodellen kan ge en nästan obegränsad mängd virtuellt videominne. På grund av dessa krav får Direct3D-program som körs i Windows Vista fortfarande dessa felvillkor. Därför är de begränsade i sin förmåga att använda de grundläggande Direct3D 9-gränssnitten för att fullt ut använda vissa funktioner i den nya drivrutinsmodellen.
Även om nya system som levereras med Windows Vista kommer att innehålla grafikkort med WDDM-drivrutiner, och nya drivrutiner för ett antal populära grafikkort ingår i rutan, fortsätter Windows Vista att stödja möjligheten att använda äldre XPDM-drivrutiner för uppgraderingar och företagsversioner. På system som använder den gamla drivrutinsmodellen måste Direct3D 9 och äldre gränssnitt användas, och driften av grafiksystemet liknar den i Windows XP (bild 1). WDDM krävs för att program ska kunna använda Direct3D 9Ex, Direct3D 10 och senare versioner.
Direct3D 9Ex
Direct3D 9Ex-gränssnittet ger åtkomst till ett litet tillägg av standard-API:et Direct3D 9 som exponerar den virtualiserade resursallokeringen, ny förlorad enhetssemantik och några andra nya funktioner som är tillgängliga när de körs i Windows Vista. Genom att skapa det här utökade objektet använder Direct3D 9-API:et den nya semantiken och kräver därför att programmet använder annan logik (och därmed olika kodsökvägar) för att skapa resurser, hantera och felhantera nya typer av villkor. Det här API:et är endast tillgängligt i Windows Vista och kräver WDDM-drivrutiner. Eftersom Direct3D 9Ex använder en separat API- och drivrutinskodsökväg än Direct3D 9 kräver stöd för det här API:et ytterligare testfall för ditt program.
Den främsta orsaken till att skapa det nya Direct3D 9Ex-API:et var att ge fullständig åtkomst till de nya funktionerna i WDDM och samtidigt upprätthålla kompatibiliteten för befintliga Direct3D-program. Det nya 3D-skrivbordet och många Windows Vista-specifika program använder den här versionen av Direct3D 9, men de fungerar inte när de körs på äldre XPDM-drivrutiner. Eftersom Direct3D 9Ex-API:et aldrig visas i äldre versioner av Windows på grund av bristande stöd för WDDM täcker standardgränssnitten för Direct3D 9 en mycket bredare uppsättning system. För högpresterande program som kan dra nytta av nästa generations videomaskinvara ger den helt nya version 10 av Direct3D många nya funktioner som inte exponeras av Direct3D 9Ex. Därför är Direct3D 9 eller Direct3D 10 det rekommenderade API:et för spel och de flesta andra program.
Not
DirectX SDK tillhandahåller inte exempel, rubriker eller bibliotek för Direct3D 9Ex-gränssnittet. Mer information om Direct3D 9Ex finns i DirectX för Windows Vista.
Direct3D 10
För att fullt ut förverkliga potentialen i den nya Windows Vista-drivrutinsmodellen och nästa generations maskinvara har en helt ny version av Direct3D-API:et skapats. Även om WDDM eliminerar några av begränsningarna för prestanda i det befintliga grafiksystemet, går Direct3D 10 längre genom att ta bort flaskhalsar i designen i det befintliga Direct3D-API:et och avsevärt förenklar uppgiften att programmera GPU:n.
Det nya API:et eliminerar helt alla utom några aspekter med fast funktion, ersätter dem med programmerbara konstruktioner och effektiviserar den interna implementeringen avsevärt. De hundratals funktionsbitarna i tidigare versioner av Direct3D har helt eliminerats och ersatts med en väldefinierad, inkluderande uppsättning funktioner som bara har några valfria användningsscenarier för specifika resursformat. Processorintensiv resursskapande och validering har nu explicita semantik i det nya API:et. Detta möjliggör mycket mer förutsägbart prestandabeteende och avsevärt lägre per dragningskostnad. Resurser kan konfigureras om till flera formulär för att möjliggöra effektiv användning i olika steg, och funktionsuppsättningen medför mycket färre begränsningar för användningsscenarier för format. Det finns också nya blockkomprimerade strukturformat för normalkarta.
I det nya API:et är skuggningskonstanter och enhetstillstånd explicita resurser, vilket möjliggör mycket effektivare cachelagring på maskinvaran och avsevärt förenklad drivrutinsvalidering. Den programmerbara skuggningsmodellen har enhetligts mellan både hörn- och pixelskuggare och gjorts mer uttrycksfull med en väldefinierad beräkningsmodell och operatoruppsättning. Dessutom har en ny geometrisk skuggningsfas lagts till för att fungera på primitiver efter hörnskuggningssteget. Resultatet av GPU:ns arbete i hörn- och geometriskuggningsstegen i pipelinen kan strömmas ut till video-RAM för återanvändning, vilket möjliggör möjligheten till extremt komplexa GPU-åtgärder med flera pass med minimal CPU-interaktion.
Alla dessa förbättringar möjliggör nästa generations grafikteknik och utökar möjligheten för program att avlasta arbetet till GPU:n. Avlastning möjliggör mer komplexa GPU-baserade teckenskalning, accelererade morfningstekniker, generering av skuggvolymer och extrudering, partikel- och fysiksystem som är helt GPU-baserade, mer komplexa material som kombineras till effektiva stora batchar, processuella detaljer, ray-traced förskjutningsmappning i realtid, generering av kubkartor med enkel pass och många fler tekniker – samtidigt som processorresurser frigörs för mer komplexa program.
För att tillhandahålla den här innovationsnivån i Direct3D 10 kan äldre maskinvara inte uttryckas som en partiell implementering av ett nytt gränssnitt. Ett grafikkort kan antingen stödja alla nya funktioner, eller så är det inte ett Direct3D 10-kompatibelt kort. Även om Direct3D 9 kan driva DirectX7-erans maskinvara med många saknade funktionsbitar och användningsbegränsningar, fungerar Direct3D 10 bara på en ny generation grafikkort. För att ett program ska ha stöd för äldre videomaskinvara måste det också ha stöd för Direct3D 9-gränssnitten. Framtida versioner av Direct3D bygger på version 10, vilket utökar det till nya versioner av API:et samtidigt som en strikt superuppsättning direct3D 10-funktioner säkerställs.
Mer information om Direct3D 10 finns i Direct3D 10.
Direct3D 10.1
Windows Vista Service Pack 1 utökar Direct3D 10 API med Direct3D 10.1, som lägger till valfria gränssnitt och ytterligare en skuggningsmodell för att stödja nya maskinvarufunktioner i grafikkort som stöder Direct3D 10.1. All maskinvara som kan stödja Direct3D 10.1 har också fullt stöd för alla funktioner i Direct3D 10, och spelutvecklare kan använda de ytterligare funktionerna i Direct3D 10.1 när de är tillgängliga.
Not
Direct3D 10.1 är grafik-API:et som används av Windows 7 Desktop.
Not
Windows 7 och Windows Vista-uppdateringen lägger till stöd för DXGI 1.1, 10level9-funktionsnivåer och WARP10-enheten till det befintliga Direct3D 10.1-API:et.
Direct3D 11
Windows 7 stöder en ny revision av Direct3D, Direct3D 11, som bygger på designen av Direct3D 10.1 API. Nya funktioner i API:et omfattar multitrådad rendering och resursskapande, Compute Shader, stöd för 10level9-funktionsnivåer och WARP10-programvarurenderingsenhet och nya direct3D 11-klassmaskinvarafunktioner som tessellation med hull & domänskuggor, BC6H- och BC7-texturkomprimeringsformat, Shader Model 5.0 och Dynamic Shader Linkage. Det nya API:et kan använda befintliga Direct3D 10- och 10.1-klassvideokort, vissa Direct3D 9-kort via funktionsnivåerna 10level9 med begränsat funktionsstöd och den senaste generationens Direct3D 11-klasss grafikkort.
Förutom Direct3D 11 API innehåller Windows 7 DXGI 1.1, Direct2D, DirectWrite och stöd för WDDM 1.1-drivrutiner.
Not
Direct3D 11 och relaterade API:er är också tillgängliga som en uppdatering av Windows Vista (se Så här installerar du den senaste versionen av DirectX).
Direct3D 11.1
Windows 8 utökar Direct3D 11 API- med Direct3D 11.1. Direct3D 11.1 stöder all befintlig maskinvara som funktionsnivåer 11, 10_x och 9_x samt en ny funktionsnivå på 11_1.
Förutom Direct3D 11.1 APIinnehåller Windows 8 DXGI 1.2, Direct2D-enhetskontexteroch stöd för WDDM 1.2-drivrutiner.
Not
Om du vill att dina Windows Store-appar ska programmera 3D-grafik med DirectX kan du använda Api:et Direct3D 11.1. Mer information om hur du programmerar 3D-grafik med DirectX finns i Introduktion till 3D-grafik med DirectX.
Platform Update för Windows 7: Partiellt stöd är tillgängligt för Direct3D 11.1 API- på Windows 7 eller Windows Server 2008 R2 med Platform Update för Windows 7 installerat. Mer information om Plattformsuppdatering för Windows 7 finns i Platform Update för Windows 7.
OpenGL
Windows Vista, Windows 7 och Windows 8 har samma stöd som Windows XP för OpenGL, vilket gör att grafikkortstillverkare kan tillhandahålla en installationsbar klientdrivrutin (ICD) för OpenGL som ger maskinvaruaccelererat stöd. Observera att nyare versioner av sådana ICD:er krävs för fullt stöd för Windows Vista, Windows 7 eller Windows 8. Om ingen ICD är installerad återgår systemet till OpenGL v1.1-programvarulagret i de flesta fall.
Programkompatibilitet, GDI och äldre versioner av Direct3D
Grafiksystemen Windows Vista, Windows 7 och Windows 8 är utformade för att stödja en mängd olika maskinvaru- och användningsscenarier för att möjliggöra ny teknik samtidigt som befintliga system stöds. Befintliga grafikgränssnitt, till exempel GDI, GDI+ och äldre versioner av Direct3D, fortsätter att fungera i Windows Vista och Windows 7, men ommappas internt där det är möjligt. Det innebär att de flesta befintliga Windows-program fortsätter att fungera.
Windows Vista, Windows 7 och Windows 8 fortsätter att stödja samma Direct3D- och DirectDraw-gränssnitt som Windows XP, tillbaka till version 3 av DirectX (med undantag för Direct3D:s behållna läge, som har tagits bort). Precis som med Windows XP Professional x64 Edition är 64-bitars interna program i nyare versioner av Windows begränsade till Direct3D9, DirectDraw7 eller nyare gränssnitt. Högpresterande program bör använda Direct3D 9 eller senare för att säkerställa att de har den närmaste matchningen till maskinvarufunktionerna.
Rekommendationer
Tänk på följande rekommendationer när du väljer ett API för ditt grafiska program:
- Använd Direct3D 9 om programmet måste ha stöd för Windows XP eller en tidigare version av Windows.
- Använd Direct3D 9 om du vill stödja Windows Vista eller Windows 7 som körs med XPDM-drivrutiner. För Windows Vista- eller Windows 7-system som saknar Direct3D 10 eller bättre videomaskinvara kan du antingen välja att använda den befintliga Windows XP Direct3D 9-kodsökvägen eller använda 10level9-funktionsnivåer via Direct3D 10.1 eller Direct3D 11 API.
- Använd Direct3D 11 för att dra nytta av nästa generations videomaskinvara i Windows Vista, Windows 7 och Windows 8. Windows Store-appar måste använda Direct3D 11 eller senare.