Direct2D API'ye genel bakış
Direct2D, C veya C++ ile kullanmak için Direct3D'ye benzer bir API sağlar. API, çizimle ilgili çeşitli işlevleri kullanıma sunar:
- Direct2D, Direct3D veya GDI kullanarak görüntüleme ve ekran dışı işleme için hedefleri işleyebilirsiniz.
- Koordinat alanı dönüşümleri ve dengeleme modları gibi çizim durumunu yönetmeye yönelik nesneler.
- Geometrik veriler için gösterimler ve geometri işleme işlevleri.
- Bitmaplar, geometriler ve metin için işleme fonksiyonu.
- GDI veya Direct3D kullanılarak oluşturulan grafik içerik kullanımına yönelik sağlamalar.
Bu konu, Direct2D API'sini oluşturan nesnelere genel bir bakış sağlar. Aşağıdaki bölümleri içerir:
- Direct2D Üst Bilgi Dosyalarını
- Direct2D Arabirimleri
- ID2D1Factory Arabirimi
-
Render Hedefleri
- Render Hedefi Özellikleri
- Render Hedefi Kaynakları
- Çizim Komutlarını
- Hata İşleme
-
Çizim Kaynakları
- Fırçalar
- Geometriler
- Bitmap'ler
- Çizim Metni
- Direct2D Temel Öğeleri
- İlgili konular
Direct2D Üst Bilgi Dosyaları
Direct2D API aşağıdaki üst bilgi dosyaları tarafından tanımlanır.
Başlık dosyası | Açıklama |
---|---|
d2d1.h | Birincil Direct2D API'sinin C ve C++ sürümlerini tanımlar. |
d2d1helper.h | C++ yardımcı işlevlerini, sınıflarını ve yapılarını tanımlar. |
d2dbasetypes.h | Direct2D için noktalar ve dikdörtgenler gibi çizim temel öğelerini tanımlar. Bu üst bilgi d2d1.h ile birlikte sağlanır. |
d2derr.h | Direct2D için hata kodlarını tanımlar. Bu başlık dosyası, d2d1.h ile birlikte sağlanır. |
d2d1_1.h | Windows 8 ve üzeri için birincil Direct2D API'sinin C ve C++ sürümlerini tanımlar. |
d2d1_1helper.h | Windows 8 ve üzeri için C++ yardımcı işlevlerini, sınıflarını ve yapılarını tanımlar. |
d2d1effects.h | Windows 8 ve üzeri için Direct2D API'sinin görüntü efektleri bölümünün C ve C++ sürümlerini tanımlar. |
d2d1effecthelpers.h | Windows 8 ve üzeri için Direct2D API'sinin görüntü efektlerinin C++ yardımcı işlevlerini, sınıflarını ve yapılarını tanımlar. |
Direct2D'yi kullanmak için uygulamanız d2d1.h üst bilgi dosyasını içermelidir.
Direct2D uygulaması derlemek için d2d1.lib dosyasını kitaplık listesine ekleyin. d2d1.h ve d2d1.lib Windows 7 için Windows Yazılım Geliştirme Kiti'nde (SDK)bulabilirsiniz.
Aşağıdaki bölümlerde Direct2D API tarafından sağlanan bazı yaygın arabirimler açıklanmaktadır.
Direct2D Arabirimleri
Direct2D API'sinin kökünde ID2D1Factory ve ID2D1Resource arabirimleri bulunmaktadır. ID2D1Factory nesnesi, ID2D1Resource nesneleri oluşturur ve Direct2D'yi kullanmak için başlangıç noktası görevi görür. Diğer tüm Direct2D nesneleri ID2D1Resource arabiriminden devralır. İki tür Direct2D kaynağı vardır: cihazdan bağımsız kaynaklar ve cihaza bağımlı kaynaklar.
- Cihazdan bağımsız kaynaklar belirli bir işleme cihazıyla ilişkilendirilmemiş ve uygulamanın kullanım ömrü boyunca kalıcı olabilir.
- Cihaza bağımlı kaynaklar belirli bir işleme cihazıyla ilişkilendirilir ve cihaz kaldırılırsa çalışmaz.
(Kaynaklar ve kaynak paylaşımı hakkında daha fazla bilgi için bkz. Kaynaklara Genel Bakış.)
ID2D1Factory Arabirimi
ID2D1Factory arabirimi, Direct2D kullanmanın başlangıç noktasıdır. Direct2D kaynaklarını oluşturmak için ID2D1Factory kullanırsınız. ID2D1Factory oluşturmak için CreateFactory yöntemlerinden birini kullanırsınız.
Fabrika, aşağıdaki çizim kaynaklarını oluşturabilen birKaynağı Oluşturma yöntemleri kümesi tanımlar:
- İşleme hedefleri, çizim komutlarını işleyen nesnelerdir.
- Çizim durumu blokları, geçerli dönüştürme ve dengeleme modu gibi çizim durumu bilgilerini depolayan nesnelerdir.
- Geometriler, basit ve potansiyel olarak karmaşık şekilleri temsil eden nesnelerdir.
Bir fabrikanın oluşturabileceği en kullanışlı nesnelerden biri, aşağıdaki bölümde açıklanan ID2D1RenderTarget.
İşleme Hedefleri
İşleme hedefi, ID2D1RenderTarget arabiriminden devralan bir kaynak nesnesidir. İşleme hedefi, çizim için kaynaklar oluşturur ve çizim işlemlerini gerçekleştirir. Grafikleri aşağıdaki yollarla işlemek için kullanılabilecek çeşitli işleme hedefleri vardır:
- ID2D1HwndRenderTarget nesneleri bir pencereye içerik yerleştirir.
- ID2D1DCRenderTarget nesneleri GDI cihaz bağlamında işlenir.
- Bitmap işleme hedef nesneleri, içeriği ekran dışında bir bitmap olarak işler.
- DXGI işleme hedefi nesneler, Direct3D ile kullanılmak üzere bir DXGI yüzeyine işlenir.
İşleme hedefi belirli bir işleme cihazıyla ilişkilendirildiğinden, cihaza bağımlı bir kaynaktır ve cihaz kaldırılırsa çalışmaz.
Hedef Görüntüleme Özellikleri
İşleme hedefinin donanım hızlandırması kullanıp kullanmayacağını ve uzak ekranın yerel veya uzak bilgisayar tarafından işlenip işlenmeyeceğini belirtebilirsiniz. İşleme hedefleri diğer ad veya kötü amaçlı işleme için ayarlanabilir. Çok sayıda temel öğe içeren sahneleri işlemek için, bir geliştirici 2-B grafikleri aliased modda işleyebilir ve daha fazla ölçeklenebilirlik elde etmek için D3D çoklu örnekleme kenar yumuşatma kullanabilir.
İşleme hedefleri ayrıca çizim işlemlerini ID2D1Layer arabirimi tarafından temsil edilen katmanlar halinde gruplandırabilir. Çizim işlemlerinin bir çerçeve oluşturulurken birleştirilmesi için katmanlar kullanışlıdır. Bazı senaryolarda, katmanlama için ayırma maliyetleri ID2D1BitmapRenderTargetdeğerinden daha düşük olduğundan bu, bitmap render hedefine işlem yapmaya ve ardından bitmap içeriğini yeniden kullanmaya yararlı bir alternatif olabilir.
İşleme hedefleri kendileriyle uyumlu yeni işleme hedefleri oluşturabilir ve bu da özgün üzerinde ayarlanan çeşitli işleme hedefi özelliklerini korurken ara ekran dışı işleme için kullanışlıdır.
Ayrıca, GDI cihaz bağlamını almak için kullanılabilecek GetDC ve ReleaseDC yöntemlerine sahip ID2D1GdiInteropRenderTargetiçin bir işleme hedefinde QueryInterface çağırarak bir Direct2D işleme hedefinde GDI kullanarak işlemek de mümkündür. GDI aracılığıyla işleme yalnızca işleme hedefi D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE bayrağı kümesiyle oluşturulduysa mümkündür. Bu, öncelikli olarak Direct2D ile işlenen ancak GDI ile işlenme olanağı gerektiren genişletilebilirlik modeline veya diğer eski içeriğe sahip uygulamalar için kullanışlıdır. Daha fazla bilgi için bkz. Direct2D ve GDI Birlikte Çalışabilirliğe Genel Bakış.
Çizim Hedefi Kaynakları
Bir fabrika gibi işleme hedefi de çizim kaynakları oluşturabilir. İşleme hedefi tarafından oluşturulan tüm kaynaklar cihaza bağımlı kaynaklardır (işleme hedefi gibi). İşleme hedefi aşağıdaki kaynak türlerini oluşturabilir:
- Bitmap
- Fırçalar
- Katmanlar
- Kafes
Çizim Komutları
İçeriği işlemek için işleme hedefi çizim yöntemlerini kullanırsınız. Çizime başlamadan önce id2D1RenderTarget::BeginDrawyöntemini çağırırsınız. Çizimi tamamladıktan sonra ID2D1RenderTarget::EndDraw yöntemini çağırırsınız. Bu çağrılar arasında çizim kaynaklarını işlemek için Çiz ve Doldur yöntemlerini kullanırsınız. Çiz ve Doldur yöntemlerinin çoğu, şekli doldurmak veya ana hatlarını oluşturmak için bir şekil (ilkel veya geometri) ve fırça alır.
İşleme hedefleri ayrıca kırpma, opaklık maskeleri uygulama ve koordinat alanını dönüştürme yöntemleri sağlar.
Direct2D sol elle kullanılan bir koordinat sistemi kullanır: pozitif x ekseni değerleri sağa, pozitif y ekseni değerleri aşağı doğru ilerler.
Hata İşleme
Hedef çizim komutları, istenen işlemin başarılı olup olmadığını vermez. Çizim hataları olup olmadığını öğrenmek için, HRESULTelde etmek için işleme hedefini Flush yöntemini veya EndDraw yöntemini çağırın.
Kaynaklara Ulaşma
Aşağıdaki bölümlerde, işleme hedefi ve fabrika arabirimleri tarafından oluşturulabilecek bazı kaynaklar açıklanmaktadır.
Fırçalar
ID2D1Brush arabirimiyle temsil edilen fırça, işleme hedefi tarafından oluşturulan ve bir alanı çıkışıyla boyayan cihaza bağımlı bir kaynaktır. Farklı fırçaların farklı çıkış türleri vardır. Bazı fırçalar düz renkle bir alanı, diğerleri gradyan veya resimle boyar. Direct2D dört tür fırça sağlar:
- ID2D1SolidColorBrush bir alanı düz bir renkle boyar.
- ID2D1LinearGradientBrush, gradyan ekseni olan iki veya daha fazla rengi bir çizgi üzerinde karıştıran doğrusal gradyan ile bir alanı boyar.
- ID2D1RadialGradientBrush, bir alanı bir elipsin etrafında iki veya daha fazla rengi karıştırarak bir radyal degrade ile boyar.
- ID2D1BitmapBrush bir alanı bir bitmap ile boyar.
Fırça oluşturmak için, ID2D1RenderTarget::Create*<Type>*Brush yöntemlerinden birini kullanırsınız; örneğin, CreateRadialGradientBrush. Fırçalar, şekil vuruşunu veya ana hattını boyamak için ya da opaklık maskesi olarak işleme hedefi Çiz ve Doldur yöntemleriyle kullanılabilir.
Fırçalar hakkında daha fazla bilgi için bkz. Fırçalara Genel Bakış.
Geometriler
Nokta, dikdörtgen ve üç nokta gibi temel çizim temel öğelerinin yanı sıra, Direct2D basit ve karmaşık şekilleri açıklamak için ID2D1Geometryarabiriminisağlar. ID2D1Geometry'den devralan arabirimler, dikdörtgenleri temsil etmek için ID2D1RectangleGeometry, yuvarlatılmış dikdörtgenleri temsil etmek için ID2D1RoundedRectangleGeometry ve elipsleri temsil etmek için ID2D1EllipseGeometry gibi farklı şekil türlerini tanımlar.
Çizgilerden, eğrilerden ve yaylardan oluşan bir dizi şekil belirtmek için ID2D1GeometrySinkarabirimikullanılarak daha karmaşık şekiller oluşturulabilir. ID2D1GeometrySink, karmaşık bir geometri oluşturmak amacıyla bir ID2D1PathGeometry'in Open yöntemine geçirilir. ID2D1SimplifiedGeometrySink, artistik işleme için biçimlendirilmiş metnin yol ana hatlarını ayıklamak için DirectWrite API'si ile de kullanılabilir.
Geometri arabirimleri, mevcut geometrileri genişleterek veya basitleştirerek ya da birden çok geometrinin kesişimini veya birleşimini oluşturarak şekilleri işlemeye yönelik yöntemler sağlar. Ayrıca geometrilerin kesişip kesişmediğini veya çakışıp çakışmadığını saptamak, sınır bilgilerini almak, geometrinin alanını veya uzunluğunu hesaplama ve geometri boyunca konumları ilişkilendirmek için yöntemler sağlar. Direct2D ayrıca bir geometriden mozaiklenmiş bir üçgen örgüsü oluşturma yeteneği de sağlar.
Geometri oluşturmak için ID2D1Factory::Create*<Type>*Geometry yöntemlerinden birini kullanırsınız; örneğin, CreatePathGeometry. Geometri, cihazdan bağımsız bir kaynaktır.
Geometriyi işlemek için DrawGeometry ve bir işleme hedefinin FillGeometryyöntemlerinikullanırsınız.
Geometriler hakkında daha fazla bilgi için bkz. Geometrilere Genel Bakış.
Bitmapler
Direct2D bit eşlemleri yüklemek veya depolamak için yöntemler sağlamaz; bunun yerine, Windows Görüntüleme Bileşeni (WIC)kullanarak bit eşlemler oluşturmanıza olanak tanır. Bit eşlem kaynakları WIC kullanılarak yüklenebilir ve ardından ID2D1RenderTarget::CreateBitmapFromWicBitmap yöntemi aracılığıyla ID2D1Bitmap oluşturmak için kullanılabilir.
Bitmap'ler, başka yollarla oluşturulan bellek içi verilerden de yaratılabilir. Bit eşlem oluşturulduktan sonra, drawBitmapyöntemiişleme hedefi tarafından veya bit eşlem fırçasıyla çizilebilir.
Donanım işleme hedeflerinde bit eşlem kaynakları oluşturmak genellikle pahalı bir işlem olduğundan, Direct2D CopyFromBitmap, CopyFromRenderTargetve CopyFromMemory yöntemlerini kullanarak bit eşlem içeriğini (veya bit eşleminin bir kısmını) güncelleştirebilir. Bu yöntemlerin kullanılması potansiyel olarak ek GPU doku ayırmalarıyla ilişkili maliyetlerden tasarruf edebilir.
Metin Çizme
Direct2D, yeni metin API'sinin (DirectWrite) metin işlemleriyle çalışacak şekilde tasarlanmıştır. DirectWrite API'sini kullanmayı kolaylaştırmak için, işleme hedefleri DirectWrite metin kaynaklarını işlemek için üç yöntem sağlar: DrawText, DrawTextLayoutve DrawGlyphRun. Direct2D, ClearType metin işleme işlemi için GPU kullandığından, Direct2D metin işlemleri için GDI'dan daha düşük CPU kullanımı ve daha fazla GPU işleme gücü kullanılabilir olduğundan daha iyi ölçeklenebilirlik sağlar.
ID2D1RenderTarget::DrawText, Unicode metin dizesini en az biçimlendirme ile işlemek için en basit senaryolar için tasarlanmıştır. Daha karmaşık bir düzen ve tipografik esneklik, ID2D1RenderTarget::DrawTextLayout yöntemi aracılığıyla sağlanır. Bu yöntem, işlenecek içeriği ve biçimlendirmeyi belirtmek için bir IDWriteTextLayout nesnesi kullanır. IDWriteTextLayout , metin alt dizeleri ve diğer gelişmiş tipografi seçenekleri için tek tek biçimlendirme belirtmenizi sağlar.
Glif düzeyi düzenin hassas denetiminin gerekli olduğu senaryolarda, ID2D1RenderTarget::D rawGlyphRun yöntemi, DirectWritetarafından sağlanan ölçüm olanaklarıyla birlikte kullanılabilir.
DirectWrite API'sini kullanmak için dwrite.h üst bilgisini ekleyin. Direct2D gibi DirectWrite de metin nesneleri oluşturmak için IDWriteFactorybir fabrika kullanır. Fabrika oluşturmak için DWriteCreateFactory işlevini kullanın ve ardından DirectWrite kaynaklarını (örneğin, IDWriteTextFormat) oluşturmak için Create yöntemlerini kullanın.
DirectWrite hakkında daha fazla bilgi için DirectWrite tanıtımı konusuna bakın.
Direct2D TemelLeri
Direct2D, diğer çizim API'leri tarafından sağlananlara benzer bir temel öğe kümesi tanımlar. Bir renk yapısı, dönüştürmeleri gerçekleştirmek için bir matris yapısı ve nokta, dikdörtgen, elips ve boyut yapılarının kayan nokta ve tamsayı sürümlerini sağlar. Genellikle, bu yapıların kayan nokta sürümlerini kullanırsınız.
Direct2D temel öğelerini örneklemek için fabrika veya işleme hedefi kullanmazsınız. Bunları doğrudan oluşturabilir veya d2d1helper.h dosyasında tanımlanan yardımcı yöntemleri kullanarak oluşturabilirsiniz.
İlgili konular