Dela via


Översikt över Direct2D API

Direct2D tillhandahåller ett API, liknande Direct3D, för användning med C eller C++. API:et exponerar en mängd olika ritningsrelaterade funktioner:

  • Rendera mål för visning och återgivning utanför skärmen med Direct2D, Direct3D eller GDI.
  • Objekt för att hantera ritningstillstånd, till exempel koordinatutrymmestransformering och antialiaseringslägen.
  • Representationer för geometriska data och funktioner för geometribearbetning.
  • Återgivningsfunktioner för bitmappar, geometrier och text.
  • Bestämmelser för användning av grafiskt innehåll som skapats med hjälp av GDI eller Direct3D.

Det här avsnittet innehåller en översikt över de objekt som utgör Direct2D-API:et. Den innehåller följande avsnitt:

Direct2D-huvudfiler

Direct2D-API:et definieras av följande huvudfiler.

Header-fil Beskrivning
d2d1.h Definierar C- och C++-versioner av det primära Direct2D-API:et.
d2d1helper.h Definierar C++-hjälpfunktioner, klasser och strukturer.
d2dbasetypes.h Definierar ritningsprimitanter för Direct2D, till exempel punkter och rektanglar. Den här rubriken ingår i d2d1.h.
d2derr.h Definierar felkoderna för Direct2D. Den här rubriken ingår i d2d1.h.
d2d1_1.h Definierar C- och C++-versioner av det primära Direct2D-API:et för Windows 8 och senare.
d2d1_1helper.h Definierar C++-hjälpfunktioner, klasser och strukturer för Windows 8 och senare.
d2d1effects.h Definierar C- och C++-versioner av bildeffekterna som en del av Direct2D-API:et för Windows 8 och senare.
d2d1effecthelpers.h Definierar C++-hjälpfunktioner, klasser och strukturer för bildeffekter som en del av Direct2D-API:et för Windows 8 och senare.

 

Om du vill använda Direct2D bör programmet innehålla huvudfilen d2d1.h.

Om du vill kompilera ett Direct2D-program lägger du till d2d1.lib i listan över bibliotek. Du hittar d2d1.h och d2d1.lib i Windows Software Development Kit (SDK) för Windows 7.

I följande avsnitt beskrivs några av de vanliga gränssnitten som tillhandahålls av Direct2D-API:et.

Direct2D-gränssnitt

I kärnan av Direct2D-API:t finns ID2D1Factory och ID2D1Resource-gränssnitt. Ett ID2D1Factory--objekt skapar ID2D1Resource- objekt och fungerar som startpunkt för att använda Direct2D. Alla andra Direct2D-objekt ärver från gränssnittet ID2D1Resource. Det finns två typer av Direct2D-resurser: enhetsoberoende resurser och enhetsberoende resurser.

  • Enhetsoberoende resurser är inte associerade med en viss återgivningsenhet och kan sparas under programmets livslängd.
  • Enhetsberoende resurser är associerade med en viss återgivningsenhet och upphör att fungera om enheten tas bort.

(Mer information om resurser och resursdelning finns i översikten över resurser.)

ID2D1Factory-gränssnittet

Gränssnittet ID2D1Factory är startpunkten för att använda Direct2D. Du använder en ID2D1Factory- för att instansiera Direct2D-resurser. Om du vill skapa en ID2D1Factory använder du någon av metoderna CreateFactory.

En fabrik definierar en uppsättning create*- metoder (där * är en platshållare för ett resursnamn) som kan skapa följande ritningsresurser:

  • Återgivningsmål är objekt som renderar ritkommandon.
  • Rittillståndsblock är objekt som lagrar information om ritningstillstånd, till exempel aktuell transformering och antialiaseringsläge.
  • Geometrier är objekt som representerar enkla och potentiellt komplexa former.

Ett av de mest användbara objekt som en fabrik kan skapa är ID2D1RenderTarget, som beskrivs i följande avsnitt.

Renderingsmål

Ett återgivningsmål är en resurs som ärver från gränssnittet ID2D1RenderTarget. Ett återgivningsmål skapar resurser för ritning och utför ritningsåtgärder. Det finns flera typer av återgivningsmål som kan användas för att återge grafik på följande sätt:

  • ID2D1HwndRenderTarget objekt återger innehåll till ett fönster.
  • ID2D1DCRenderTarget objekt återges till en GDI-enhetskontext.
  • Bitmap-renderingsmålobjekt återger innehåll till en off-screen bitmapp.
  • DXGI-målobjekt för återgivning renderas till en DXGI-yta för användning med Direct3D.

Eftersom ett återgivningsmål är associerat med en viss återgivningsenhet är det en enhetsberoende resurs och upphör att fungera om enheten tas bort.

Rendera målfunktioner

Du kan ange om ett återgivningsmål ska använda maskinvaruacceleration och om fjärrvisning ska återges av den lokala datorn eller fjärrdatorn. Återgivningsmål kan konfigureras för återgivning med alias eller utan alias. För rendering av scener med ett stort antal primitiver kan en utvecklare även rendera 2D-grafik i aliasläge och använda D3D multisample-antialias för att uppnå större skalbarhet.

Renderingsmål kan också gruppera ritningsåtgärder i lager som representeras av ID2D1Layer-gränssnittet. Lager är användbara för att samla ritoperationer för att sammanställas vid rendering av en bildruta. I vissa scenarier kan detta vara ett användbart alternativ till att återge till ett mål för bitmappsåtergivning och sedan återanvända innehållet i bitmappen, eftersom allokeringskostnaderna för skiktning är lägre än för en ID2D1BitmapRenderTarget-.

Renderingsmål kan skapa nya renderingsmål som är kompatibla med originalmålens egenskaper, vilket är användbart för mellanliggande rendering utanför skärmen samtidigt som egenskaperna hos renderingsmålet som har angetts på originalet bevaras.

Det går också att rendera med hjälp av GDI på ett Direct2D-återgivningsmål genom att anropa QueryInterface på ett återgivningsmål för ID2D1GdiInteropRenderTarget, som har GetDC- och ReleaseDC metoder som kan användas för att hämta en GDI-enhetskontext. Återgivning via GDI är endast möjligt om återgivningsmålet har skapats med D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE flagguppsättning. Detta är användbart för program som främst renderas med Direct2D men har en utökningsmodell eller annat äldre innehåll som kräver möjligheten att återge med GDI. Mer information finns i Direct2D och GDI Interoperability Overview.

Rendera målresurser

Precis som en fabrik kan ett återgivningsmål skapa ritningsresurser. Alla resurser som skapas av ett återgivningsmål är enhetsberoende resurser (precis som återgivningsmålet). Ett återgivningsmål kan skapa följande typer av resurser:

  • Bitmappar
  • Borstar
  • Lager
  • Maskor

Ritverktygskommandon

Om du vill återge innehåll använder du ritningsmetoderna för återgivningsmål. Innan du börjar rita anropa du metoden ID2D1RenderTarget::BeginDraw. När du har ritat klart anropar du metoden ID2D1RenderTarget::EndDraw. Mellan dessa anrop använder du metoderna Draw och Fill för att rendera ritresurser. De flesta metoder för rita och fyllning tar en form (antingen en primitiv eller en geometri) och en pensel för att fylla eller beskriva formen.

Återgivningsmål innehåller också metoder för klippning, tillämpning av opacitetsmasker och att transformera koordinatutrymmet.

Direct2D använder ett vänsterkoordinatsystem: positiva x-axelvärden fortsätter till höger och positiva y-axelvärden fortsätter nedåt.

Felhantering

Rendera målritningskommandon anger inte om den begärda åtgärden lyckades. Om du vill ta reda på om det uppstod ritfel anropar du metoden Flush eller EndDraw för att hämta en HRESULT-.

Ritningsresurser

I följande avsnitt beskrivs några av de resurser som kan skapas av återgivningsmålet och fabriksgränssnitten.

Borstar

En pensel, som representeras genom ID2D1Brush-gränssnittet, är en enhetsberoende resurs som skapas av ett renderingsmål och som målar ett område med dess utdata. Olika penslar har olika typer av utdata. Vissa penslar målar ett område med en fast färg, andra med en toning eller en bild. Direct2D innehåller fyra typer av penslar:

Om du vill skapa en pensel använder du en av ID2D1RenderTarget::Create*Brush-metoderna (där * är en platshållare för ett penselnamn), till exempel CreateRadialGradientBrush. Penslar kan användas med en återgivningsmålritnings- och fyllningsmetod, antingen för att måla ett formdrag eller en kontur eller som en ogenomskinlig mask.

Mer information om penslar finns i översikten över penslar.

Geometrier

Förutom grundläggande ritningsprimitanter som punkter, rektanglar och ellipser tillhandahåller Direct2D ID2D1Geometry- gränssnitt för att beskriva enkla och komplexa former. Gränssnitt som ärver från ID2D1Geometry definiera olika typer av former, till exempel ID2D1RectangleGeometry för att representera rektanglar, ID2D1RoundedRectangleGeometry för att representera rundade rektanglar och ID2D1EllipseGeometry för att representera ellipser.

Mer komplexa former kan skapas med hjälp av ID2D1GeometrySink gränssnitt för att ange en serie siffror som består av linjer, kurvor och bågar. ID2D1GeometrySink- skickas till Öppna-metoden för en ID2D1PathGeometry- för att generera en komplex geometri. ID2D1SimplifiedGeometrySink kan också användas med DirectWrite API för att extrahera sökvägsdispositioner av formaterad text för konstnärlig återgivning.

Geometrigränssnitten tillhandahåller metoder för att manipulera former genom att bredda eller förenkla befintliga geometrier, eller genom att generera skärningspunkten eller union av flera geometrier. De tillhandahåller också metoder för att avgöra om geometrier korsar eller överlappar varandra, hämtar gränsinformation, beräknar området eller längden på en geometri och interpolerar platser längs en geometri. Direct2D ger också möjlighet att skapa ett nät av trianglar som är tessellerade från en geometri.

Om du vill skapa en geometri använder du någon av ID2D1Factory::Create*Geometry-metoderna (där * är platshållare för ett geometrinamn), till exempel CreatePathGeometry. En geometri är en enhetsoberoende resurs.

Om du vill återge en geometri använder du DrawGeometry och FillGeometry metoder för ett återgivningsmål.

Mer information om geometrier finns i översikten över geometrier.

Bitmappar

Direct2D tillhandahåller inte metoder för inläsning eller lagring av bitmappar. I stället kan du skapa bitmappar med hjälp av Windows Imaging Component (WIC). Bitmappsresurser kan läsas in med hjälp av WIC och sedan användas för att skapa en ID2D1Bitmap- via metoden ID2D1RenderTarget::CreateBitmapFromWicBitmap-metoden.

Bitmappar kan också skapas från minnesintern data som har konfigurerats på annat sätt. När en bitmapp har skapats kan den ritas av återgivningsmålet DrawBitmap--metoden eller med en bitmappsborste.

Eftersom det ofta är dyrt att skapa bitmappsresurser på mål för maskinvaruåtergivning kan Direct2D uppdatera innehållet i en bitmapp (eller del av bitmappen) med hjälp av CopyFromBitmap, CopyFromRenderTargetoch CopyFromMemory metoder. Med de här metoderna kan du eventuellt spara kostnader som är associerade med ytterligare GPU-strukturallokeringar.

Text för ritning

Direct2D har utformats för att fungera med textåtgärderna i det nya text-API:et DirectWrite. Om du vill göra det enklare att använda DirectWrite-API:et tillhandahåller renderingsmål tre metoder för att återge DirectWrite-textresurser: DrawText, DrawTextLayoutoch DrawGlyphRun. Eftersom Direct2D använder GPU:n för ClearType-textrenderingsprocessen ger Direct2D lägre CPU-användning än GDI för textåtgärder och bättre skalbarhet eftersom mer GPU-bearbetningskraft är tillgänglig.

ID2D1RenderTarget::DrawText är utformad för de enklaste scenarierna som omfattar återgivning av en sträng med Unicode-text med minimal formatering. Mer komplex layout och typografisk flexibilitet tillhandahålls via metoden ID2D1RenderTarget::DrawTextLayout, som använder ett IDWriteTextLayout-objekt för att ange innehållet och formateringen som ska återges. IDWriteTextLayout- kan du ange individuell formatering för delsträngar av text och andra avancerade typografialternativ.

För scenarier där exakt kontroll över glyphnivålayout krävs kan man använda metoden ID2D1RenderTarget::DrawGlyphRun tillsammans med de mätfunktioner som tillhandahålls av DirectWrite.

Om du vill använda DirectWrite API inkluderar du "dwrite.h"-huvudfilen. Precis som Direct2D använder DirectWrite en fabrik, IDWriteFactory för att skapa textobjekt. Använd funktionen DWriteCreateFactory för att skapa en fabrik och använd sedan dess Create-metoder för att skapa DirectWrite-resurser (till exempel IDWriteTextFormat).

Mer information om DirectWrite finns i avsnittet Introducing DirectWrite.

Direct2D-primitiver

Direct2D definierar en uppsättning primitiver som liknar dem som tillhandahålls av andra ritnings-API:er. Den innehåller en färgstruktur, en matrisstruktur för att utföra transformeringar och flyttals- och heltalsversioner av punkter, rektanglar, ellipser och storleksstrukturer. Vanligtvis använder du flyttalsversionerna av dessa strukturer.

Du använder inte en fabrik eller ett renderingsmål för att skapa Direct2D-primitiver. Du kan skapa dem direkt eller använda hjälpmetoderna som definierats i d2d1helper.h för att skapa dem.

Direct2D-referens

DirectWrite HelloWorld

Introduktion till DirectWrite

översikt över resurser

Windows Imaging Component (WIC)