Přehled rozhraní API Direct2D
Direct2D poskytuje rozhraní API podobné Direct3D pro použití s C nebo C++. Rozhraní API zveřejňuje celou řadu funkcí souvisejících s výkresem:
- Cíle vykreslování pro zobrazení a vykreslování mimo obrazovku pomocí Direct2D, Direct3D nebo GDI
- Objekty pro správu stavu výkresu, jako jsou transformace prostoru souřadnic a režimy antialiasing.
- Reprezentace geometrických dat a funkcí pro zpracování geometrie
- Funkce vykreslování pro rastrové obrázky, geometrie a text
- Ustanovení pro používání grafického obsahu vytvořeného pomocí GDI nebo Direct3D.
Toto téma obsahuje přehled objektů, které tvoří rozhraní API Direct2D. Obsahuje následující části:
- soubory hlaviček Direct2D
- rozhraní Direct2D
- Rozhraní ID2D1Factory
- Renderovací Cíle
- Zdroje pro kreslení
- nakreslený text
- Primitiva Direct2D
- související témata
Soubory hlaviček Direct2D
Rozhraní API Direct2D je definováno následujícími soubory hlaviček.
Hlavičkový soubor | Popis |
---|---|
d2d1.h | Definuje verze jazyka C a C++ primárního rozhraní API Direct2D. |
d2d1helper.h | Definuje pomocné funkce, třídy a struktury jazyka C++. |
d2dbasetypes.h | Definuje primitiva kreslení pro Direct2D, například body a obdélníky. Tato hlavička je součástí d2d1.h. |
d2derr.h | Definuje kódy chyb pro Direct2D. Tato hlavička je součástí d2d1.h. |
d2d1_1.h | Definuje verze C a C++ primárního rozhraní API Direct2D pro Windows 8 a novější. |
d2d1_1helper.h | Definuje pomocné funkce, třídy a struktury C++ pro Windows 8 a novější. |
d2d1effects.h | Definuje verze C a C++ pro část s obrazovými efekty rozhraní Direct2D API ve Windows 8 a novějších. |
d2d1effecthelpers.h | Definuje pomocné funkce, třídy a struktury části rozhraní API Direct2D, zaměřené na obrazové efekty, pro Windows 8 a novější. |
Pokud chcete použít Direct2D, měla by vaše aplikace obsahovat soubor hlaviček d2d1.h.
Chcete-li zkompilovat aplikaci Direct2D, přidejte do seznamu knihoven knihovnu d2d1.lib. D2d1.h a d2d1.lib najdete v Windows Software Development Kit (SDK) pro Windows 7.
Následující části popisují některá běžná rozhraní, která poskytuje rozhraní API Direct2D.
Rozhraní Direct2D
V kořenovém adresáři rozhraní API Direct2D jsou rozhraní ID2D1Factory a ID2D1Resource rozhraní. Objekt ID2D1Factory vytvoří ID2D1Resource objekty a slouží jako výchozí bod pro použití Direct2D. Všechny ostatní objekty Direct2D dědí z rozhraní ID2D1Resource. Existují dva typy prostředků Direct2D: prostředky nezávislé na zařízení a prostředky závislé na zařízení.
- Prostředky nezávislé na zařízení nejsou přidružené k určitému vykreslovacímu zařízení a mohou trvat po dobu životnosti aplikace.
- Prostředky závislé na zařízení jsou přidružené k určitému vykreslovacímu zařízení a přestanou fungovat, pokud je toto zařízení odebráno.
(Další informace o prostředcích a sdílení prostředků najdete v tématu Zdroje – přehled.)
Rozhraní ID2D1Factory
Rozhraní ID2D1Factory je výchozím bodem pro použití Direct2D. K vytvoření instance prostředků Direct2D použijte ID2D1Factory. K vytvoření ID2D1Factory použijte jednu z metod CreateFactory.
Továrna definuje sadu metod CreateResource, které mohou vytvořit následující kreslicí prostředky:
- Cíle vykreslování jsou objekty, které vykreslují příkazy výkresu.
- Bloky stavu výkresu jsou objekty, které ukládají informace o stavu výkresu, jako je aktuální transformace a režim antialiasingu.
- Geometrie jsou objekty, které představují jednoduché a potenciálně složité obrazce.
Jedním z nejužitečnějších objektů, které může továrna vytvořit, je ID2D1RenderTarget, popsané v následující části.
Vykreslovat cíle
Cílový objekt pro vykreslování je prostředkem, který dědí z rozhraní ID2D1RenderTarget. Cíl vykreslování vytváří prostředky pro kreslení a provádí kreslicí operace. Existuje několik druhů cílů vykreslování, které lze použít k vykreslení grafiky následujícími způsoby:
- ID2D1HwndRenderTarget objekty vykreslují obsah do okna.
- ID2D1DCRenderTarget objekty se vykreslují do kontextu zařízení GDI.
- Rastrové vykreslení cílových objektů vykresluje obsah na rastrový obrázek mimo obrazovku.
- Vykreslovací cílové objekty DXGI se vykreslují na plochu DXGI pro použití s Direct3D.
Vzhledem k tomu, že cíl vykreslení je přidružený k určitému vykreslovacímu zařízení, jedná se o prostředek závislý na zařízení a přestane fungovat, pokud je zařízení odebráno.
Vlastnosti vykreslovacího cíle
Můžete určit, zda má cíl vykreslování používat hardwarovou akceleraci a zda má být vzdálené zobrazení vykresleno místním nebo vzdáleným počítačem. Cíle vykreslování je možné nastavit pro aliasované nebo antialiased vykreslování. V případě vykreslování scén s velkým počtem primitiv může vývojář vykreslit také 2D grafiku v režimu aliasů a pomocí antialiasingu D3D dosáhnout větší škálovatelnosti.
Cíle vykreslení mohou také seskupit operace kreslení do vrstev, které jsou reprezentovány rozhraním ID2D1Layer. Vrstvy jsou užitečné pro shromažďování operací kreslení, které se mají spojovat společně při vykreslování rámce. V některých scénářích to může být užitečná alternativa k vykreslení rastrového obrázkového cíle a následné opakované použití obsahu rastrového obrázku, protože náklady na přidělení vrstvení jsou nižší než u ID2D1BitmapRenderTarget.
Cíle vykreslení mohou vytvářet nové cíle vykreslování, které jsou kompatibilní se sebou, což je užitečné pro průběžné vykreslování mimo obrazovku při zachování různých vlastností cíle vykreslování, které byly nastaveny na původním obrázku.
Je také možné vykreslovat pomocí GDI na renderovacím cíli Direct2D voláním QueryInterface na cílovém objektu vykreslení pro ID2D1GdiInteropRenderTarget, který má metody GetDC a ReleaseDC, které lze použít k získání kontextu zařízení GDI. Vykreslování prostřednictvím GDI je možné pouze v případě, že byl cíl vykreslení vytvořen s nastaveným příznakem D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE. To je užitečné pro aplikace, které se primárně vykreslují pomocí Direct2D, ale mají model rozšiřitelnosti nebo jiný starší obsah, který vyžaduje možnost vykreslit pomocí GDI. Pro více informací si přečtěte Přehled o spolupráci Direct2D a GDI.
Vykreslení cílových prostředků
Podobně jako továrna může cíl vykreslení vytvářet grafické zdroje. Všechny prostředky vytvořené cílem vykreslení jsou prostředky závislé na zařízení (stejně jako cíl vykreslení). Cíl vykreslení může vytvořit následující typy prostředků:
- Rastrové obrázky
- Kartáče
- Vrstvy
- Sítě
Příkazy kreslení
K vykreslení obsahu použijete metody vykreslení cílového výkresu. Než začnete kreslit, zavoláte metodu ID2D1RenderTarget::BeginDraw. Po dokončení kreslení zavoláte metodu ID2D1RenderTarget::EndDraw. Mezi těmito voláními používáte metody Draw a Fill k vykreslení výkresových prostředků. Většina metod Draw a Fill vezme obrazec (primitivní nebo geometrii) a štětec pro vyplnění nebo osnovu obrazce.
Cíle vykreslení také poskytují metody pro oříznutí, použití masky průhlednosti a transformaci souřadnicového prostoru.
Direct2D používá levoruký souřadnicový systém: kladné hodnoty osy x pokračují doprava a kladné hodnoty osy y pokračují směrem dolů.
Zpracování chyb
Příkazy vykreslení cílového výkresu neudávají, zda byla požadovaná operace úspěšná. Chcete-li zjistit, zda došlo k chybám výkresu, zavolejte cíl vykreslení Flush metodu nebo EndDraw získat HRESULT.
Kreslicí zdroje
Následující části popisují některé prostředky, které je možno vytvořit pomocí rozhraní továrny a cíle vykreslování.
Kartáče
Štětec, reprezentovaný rozhraním ID2D1Brush, je prostředek, který závisí na zařízení a je vytvořený cílem vykreslení, který svým výstupem vyplní oblast. Různé štětce mají různé typy výstupu. Některé štětce malují oblast jednolitou barvou, jiné s přechodem nebo obrázkem. Direct2D poskytuje čtyři typy štětců:
- ID2D1SolidColorBrush vybarvuje oblast jednolitou barvou.
- ID2D1LinearGradientBrush vykresluje oblast lineárním přechodem, který míchá dvě nebo více barev podél čáry, osy přechodu.
- ID2D1RadialGradientBrush maluje oblast radiálním přechodem, který mísí dvě nebo více barev kolem elipsy.
- ID2D1BitmapBrush maluje oblast rastrovým obrázkem.
Chcete-li vytvořit štětec, použijte jednu z metod štětců ID2D1RenderTarget::Create*<typu>, například CreateRadialGradientBrush. Štětce lze použít s cílovou plochou vykreslování v metodách kreslení a vyplňování, buď pro malování tahu nebo obrysu obrazce, nebo jako masku průhlednosti.
Další informace o štětcích naleznete v části Přehled štětců.
Geometrie
Kromě základních primitiv kreslení, jako jsou body, obdélníky a elipsy, poskytuje Direct2D rozhraní ID2D1Geometry pro popis jednoduchých a složitých obrazců. Rozhraní, která dědí z ID2D1Geometry, definují různé typy obrazců, například ID2D1RectangleGeometry pro reprezentaci obdélníků, ID2D1RoundedRectangleGeometry pro reprezentaci zaoblených obdélníků, a ID2D1EllipseGeometry pro reprezentaci elips.
Složitější obrazce lze vytvořit pomocí rozhraní ID2D1GeometrySink k určení řady obrázků skládajících se z čar, křivek a oblouků. ID2D1GeometrySink se předá metodě Open ID2D1PathGeometry pro generování komplexní geometrie. ID2D1SimplifiedGeometrySink lze také použít s rozhraním API DirectWrite k extrakci obrysů cest formátovaného textu pro grafické vykreslování.
Rozhraní geometrie poskytují metody pro manipulaci s obrazci rozšířením nebo zjednodušením existujících geometrií nebo generováním průsečíku nebo sjednocení více geometrií. Poskytují také metody pro určení, zda se geometrie protínají nebo překrývají, načítají informace o hranicích, provádějí výpočet oblasti nebo délky geometrie a interpolují umístění podél geometrie. Direct2D také umožňuje vytvořit síť trojúhelníků, která je teselována z geometrie.
Chcete-li vytvořit geometrii, použijte jednu z metod geometrie typu ID2D1Factory::Create*<>*Geometry, například CreatePathGeometry. Geometrie je prostředek nezávislý na zařízení.
Chcete-li vykreslit geometrii, použijete DrawGeometry a FillGeometry metody cíle vykreslení.
Další informace o geometriích naleznete v tématu Přehled geometrií.
Rastrové obrázky
Direct2D neposkytuje metody pro načítání nebo ukládání rastrových obrázků; spíše umožňuje vytvářet rastrové obrázky pomocí Windows Imaging Component (WIC). Rastrové prostředky lze načíst pomocí WIC a poté použít k vytvoření ID2D1Bitmap metodou ID2D1RenderTarget::CreateBitmapFromWicBitmap.
Rastrové obrázky lze vytvořit také z dat v paměti, která byla nastavena jinými prostředky. Po vytvoření rastrového obrázku ho může vykreslit cíl vykreslení metodou DrawBitmap nebo rastrovým štětcem.
Vzhledem k tomu, že vytváření rastrových prostředků na cílech vykreslování hardwaru je často nákladná operace, může Direct2D aktualizovat obsah bitmapy (nebo části rastrového obrázku) pomocí CopyFromBitmap, CopyFromRenderTargeta CopyFromMemory metody. Použití těchto metod může potenciálně ušetřit náklady spojené s dalšími přiděleními textur GPU.
Kreslení textu
Direct2D byl navržený tak, aby fungoval s textovými operacemi nového textového rozhraní API DirectWrite. Aby bylo použití rozhraní DIRECTWrite API jednodušší, cíle vykreslování poskytují tři metody pro vykreslení textových prostředků DirectWrite: DrawText, DrawTextLayouta DrawGlyphRun. Vzhledem k tomu, že Direct2D používá GPU pro proces vykreslování textu ClearType, Direct2D poskytuje nižší využití procesoru než GDI pro textové operace a lepší škálovatelnost, protože je k dispozici více výpočetního výkonu GPU.
ID2D1RenderTarget::DrawText je určen pro nejjednodušší scénáře vykreslování řetězce textu Unicode s minimálním formátováním. Složitější rozložení a typografická flexibilita je poskytována prostřednictvím metody ID2D1RenderTarget::DrawTextLayout, která používá objekt IDWriteTextLayout k určení obsahu a formátování, které se má vykreslit. IDWriteTextLayout umožňuje zadat individuální formátování pro podřetětěžce textu a další pokročilé typografické možnosti.
V situacích, kdy je vyžadováno přesné řízení rozložení na úrovni glyfů, lze ID2D1RenderTarget::DrawGlyphRun metodu použít spolu s měřicími funkcemi poskytovanými DirectWrite.
Pokud chcete použít rozhraní API DirectWrite, zahrňte hlavičku dwrite.h. Stejně jako Direct2D používá DirectWrite objekt factory, IDWriteFactory k vytváření textových objektů. Pomocí funkce DWriteCreateFactory vytvořte továrnu a pak pomocí svých metod Create vytvořte prostředky DirectWrite (například IDWriteTextFormat).
Další informace o DirectWrite naleznete v tématu Představujeme DirectWrite.
Primitiva Direct2D
Direct2D definuje sadu primitiv, které jsou podobné těm, které poskytují jiná rozhraní API kreslení. Poskytuje barevnou strukturu, strukturu matice pro provádění transformací a plovoucí desetinnou čárkou a celočíselnou verzi bodů, obdélníků, elips a struktur velikostí. Obvykle používáte verze těchto struktur s pohyblivou řádovou čárkou.
K vytvoření instance primitiv Direct2D nepoužíváte továrnu ani cíl vykreslení. Můžete je vytvořit přímo nebo je vytvořit pomocí pomocných metod definovaných v souboru d2d1helper.h.
Související témata
-
Představujeme DirectWrite