Gambaran umum API Direct2D

Direct2D menyediakan API, mirip dengan Direct3D, untuk digunakan dengan C atau C++. API memaparkan berbagai fungsionalitas terkait gambar:

  • Merender target untuk penyajian layar dan di luar layar menggunakan Direct2D, Direct3D, atau GDI.
  • Objek untuk mengelola status gambar seperti transformasi ruang koordinat dan mode antialisis.
  • Representasi untuk data geometris, dan fungsi untuk pemrosesan geometri.
  • Fungsionalitas penyajian untuk bitmap, geometri, dan teks.
  • Ketentuan untuk menggunakan konten grafis yang dibuat menggunakan GDI atau Direct3D.

Topik ini memberikan gambaran umum tentang objek yang membentuk API Direct2D. Hal ini berisi bagian-bagian berikut:

File Header Direct2D

API Direct2D ditentukan oleh file header berikut.

File header Deskripsi
d2d1.h Mendefinisikan versi C dan C++ dari API Direct2D utama.
d2d1helper.h Menentukan fungsi, kelas, dan struktur pembantu C++.
d2dbasetypes.h Mendefinisikan primitif gambar untuk Direct2D, seperti titik dan persegi panjang. Header ini disertakan dengan d2d1.h.
d2derr.h Menentukan kode kesalahan untuk Direct2D. Header ini disertakan dengan d2d1.h.
d2d1_1.h Menentukan versi C dan C++ dari API Direct2D utama untuk Windows 8 dan yang lebih baru.
d2d1_1helper.h Menentukan fungsi, kelas, dan struktur pembantu C++ untuk Windows 8 dan yang lebih baru.
d2d1effects.h Menentukan versi C dan C++ dari bagian efek gambar dari DIRECT2D API untuk Windows 8 dan yang lebih baru.
d2d1effecthelpers.h Mendefinisikan fungsi pembantu C++, kelas, dan struktur efek gambar bagian dari DIRECT2D API untuk Windows 8 dan yang lebih baru.

 

Untuk menggunakan Direct2D, aplikasi Anda harus menyertakan file header d2d1.h.

Untuk mengkompilasi aplikasi Direct2D, tambahkan d2d1.lib ke daftar pustaka. Anda dapat menemukan d2d1.h dan d2d1.lib di Windows Software Development Kit (SDK) untuk Windows 7.

Bagian berikut menjelaskan beberapa antarmuka umum yang disediakan oleh DIRECT2D API.

Antarmuka Direct2D

Di akar API Direct2D adalah antarmuka ID2D1Factory dan ID2D1Resource . Objek ID2D1Factory membuat objek ID2D1Resource dan berfungsi sebagai titik awal untuk menggunakan Direct2D. Semua objek Direct2D lainnya mewarisi dari antarmuka ID2D1Resource . Ada dua jenis sumber daya Direct2D: sumber daya independen perangkat dan sumber daya yang bergantung pada perangkat.

  • Sumber daya independen perangkat tidak terkait dengan perangkat penyajian tertentu dan dapat bertahan selama masa pakai aplikasi.
  • Sumber daya yang bergantung pada perangkat dikaitkan dengan perangkat penyajian tertentu dan berhenti berfungsi jika perangkat tersebut dihapus.

(Untuk informasi selengkapnya tentang sumber daya dan berbagi sumber daya, lihat Gambaran Umum Sumber Daya.)

Antarmuka ID2D1Factory

Antarmuka ID2D1Factory adalah titik awal untuk menggunakan Direct2D. Anda menggunakan ID2D1Factory untuk membuat instans sumber daya Direct2D. Untuk membuat ID2D1Factory, Anda menggunakan salah satu metode CreateFactory .

Pabrik menentukan sekumpulan metode BuatSumber Daya yang dapat menghasilkan sumber daya gambar berikut:

  • Target render adalah objek yang merender perintah menggambar.
  • Blok status gambar adalah objek yang menyimpan informasi status gambar, seperti transformasi saat ini dan mode antialias.
  • Geometri adalah objek yang mewakili bentuk sederhana dan berpotensi kompleks.

Salah satu objek paling berguna yang dapat dibuat pabrik adalah ID2D1RenderTarget, yang dijelaskan di bagian berikut.

Render Target

Target render adalah sumber daya yang mewarisi dari antarmuka ID2D1RenderTarget . Target render membuat sumber daya untuk menggambar dan melakukan operasi menggambar. Ada beberapa jenis target render yang dapat digunakan untuk merender grafik dengan cara berikut:

  • Objek ID2D1HwndRenderTarget merender konten ke jendela.
  • Objek ID2D1DCRenderTarget dirender ke konteks perangkat GDI.
  • Bitmap merender objek target merender konten ke bitmap di luar layar.
  • DXGI merender objek target yang dirender ke permukaan DXGI untuk digunakan dengan Direct3D.

Karena target render dikaitkan dengan perangkat penyajian tertentu, target tersebut adalah sumber daya yang bergantung pada perangkat dan berhenti berfungsi jika perangkat dihapus.

Render Fitur Target

Anda dapat menentukan apakah target render harus menggunakan akselerasi perangkat keras dan apakah tampilan jarak jauh harus dirender oleh komputer lokal atau jarak jauh. Target render dapat disiapkan untuk rendering alias atau antialias. Untuk merender adegan dengan sejumlah besar primitif, pengembang juga dapat merender grafik 2-D dalam mode alias dan menggunakan antialias multisample D3D untuk mencapai skalabilitas yang lebih besar.

Target render juga dapat mengelompokkan operasi gambar ke dalam lapisan yang diwakili oleh antarmuka ID2D1Layer . Lapisan berguna untuk mengumpulkan operasi gambar yang akan disusun bersama-sama saat merender bingkai. Untuk beberapa skenario, ini bisa menjadi alternatif yang berguna untuk merender ke target render bitmap, lalu menggunakan kembali konten bitmap, karena biaya alokasi untuk lapisan lebih rendah daripada untuk ID2D1BitmapRenderTarget.

Target render dapat membuat target render baru yang kompatibel dengan mereka sendiri, yang berguna untuk penyajian di luar layar menengah sambil mempertahankan berbagai properti target render yang ditetapkan pada aslinya.

Dimungkinkan juga untuk merender menggunakan GDI pada target render Direct2D dengan memanggil QueryInterface pada target render untuk ID2D1GdiInteropRenderTarget, yang memiliki metode GetDC dan ReleaseDC di dalamnya yang dapat digunakan untuk mengambil konteks perangkat GDI. Penyajian melalui GDI hanya dimungkinkan jika target render dibuat dengan set bendera D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE . Ini berguna untuk aplikasi yang terutama dirender dengan Direct2D tetapi memiliki model ekstensibilitas atau konten warisan lainnya yang memerlukan kemampuan untuk merender dengan GDI. Untuk informasi selengkapnya, lihat Gambaran Umum Interoperabilitas Direct2D dan GDI.

Render Sumber Daya Target

Seperti pabrik, target render dapat membuat sumber daya gambar. Sumber daya apa pun yang dibuat oleh target render adalah sumber daya yang bergantung pada perangkat (sama seperti target render). Target render dapat membuat jenis sumber daya berikut:

  • Bitmap
  • Kuas
  • Lapisan
  • Jala

Perintah Gambar

Untuk merender konten, Anda menggunakan metode gambar target render. Sebelum mulai menggambar, Anda memanggil metode ID2D1RenderTarget::BeginDraw . Setelah selesai menggambar, Anda memanggil metode ID2D1RenderTarget::EndDraw . Di antara panggilan ini, Anda menggunakan metode Gambar dan Isi untuk merender sumber daya gambar. Sebagian besar metode Gambar dan Isi mengambil bentuk (baik primitif atau geometri) dan sikat untuk mengisi atau menguraikan bentuk.

Target render juga menyediakan metode untuk mengklip, menerapkan masker opasitas, dan mengubah ruang koordinat.

Direct2D menggunakan sistem koordinat sebelah kiri: nilai sumbu x positif dilanjutkan ke nilai sumbu y kanan dan positif melanjutkan ke bawah.

Penanganan Kesalahan

Perintah gambar target render tidak menunjukkan apakah operasi yang diminta berhasil. Untuk mengetahui apakah ada kesalahan menggambar, panggil metode Flush target render atau metode EndDraw untuk mendapatkan HRESULT.

Sumber Daya Gambar

Bagian berikut menjelaskan beberapa sumber daya yang dapat dibuat oleh target render dan antarmuka pabrik.

Kuas

Kuas, yang diwakili oleh antarmuka ID2D1Brush , adalah sumber daya yang bergantung pada perangkat, yang dibuat oleh target render, yang melukis area dengan outputnya. Kuas yang berbeda memiliki berbagai jenis output. Beberapa kuas melukis area dengan warna solid, yang lain dengan gradien atau gambar. Direct2D menyediakan empat jenis kuas:

Untuk membuat kuas, Anda menggunakan salah satu metode ID2D1RenderTarget::Create*<Type>*Brush, seperti CreateRadialGradientBrush. Kuas dapat digunakan dengan metode Gambar dan Isi target render, baik untuk melukis goresan bentuk atau kerangka, atau sebagai masker opasitas.

Untuk informasi selengkapnya tentang kuas, lihat Gambaran Umum Brush.

Geometri

Selain primitif gambar dasar seperti titik, persegi panjang, dan elipsis, Direct2D menyediakan antarmuka ID2D1Geometry untuk menggambarkan bentuk yang sederhana dan kompleks. Antarmuka yang mewarisi dari ID2D1Geometry menentukan berbagai jenis bentuk, seperti ID2D1RectangleGeometry untuk mewakili persegi panjang, ID2D1RoundedRectangleGeometry untuk mewakili persegi panjang bulat, dan ID2D1EllipseGeometry untuk mewakili elipsis.

Bentuk yang lebih kompleks dapat dibuat dengan menggunakan antarmuka ID2D1GeometrySink untuk menentukan serangkaian gambar yang terdiri dari garis, kurva, dan busur. ID2D1GeometrySink diteruskan ke metode Buka ID2D1PathGeometry untuk menghasilkan geometri yang kompleks. ID2D1SimplifiedGeometrySink juga dapat digunakan dengan API DirectWrite untuk mengekstrak kerangka jalur teks yang diformat untuk penyajian artistik.

Antarmuka geometri menyediakan metode untuk memanipulasi bentuk dengan memperluas atau menyederhanakan geometri yang ada, atau dengan menghasilkan persimpangan atau penyatuan beberapa geometri. Mereka juga menyediakan metode untuk menentukan apakah geometri berpotongan atau tumpang tindih, mengambil informasi batas, menghitung area atau panjang geometri, dan menginterpolasi lokasi di sepanjang geometri. Direct2D juga menyediakan kemampuan untuk membuat jala segitiga yang tessellated dari geometri.

Untuk membuat geometri, Anda menggunakan salah satu metode ID2D1Factory::Create*<Type>*Geometry, seperti CreatePathGeometry. Geometri adalah sumber daya yang independen untuk perangkat.

Untuk merender geometri, Anda menggunakan metode DrawGeometry dan FillGeometry dari target render.

Untuk informasi selengkapnya tentang geometri, lihat Gambaran Umum Geometri.

Bitmap

Direct2D tidak menyediakan metode untuk memuat atau menyimpan bitmap; sebaliknya, ini memungkinkan Anda untuk membuat bitmap menggunakan Komponen Pencitraan Windows (WIC). Sumber daya Bitmap dapat dimuat menggunakan WIC dan kemudian digunakan untuk membuat ID2D1Bitmap melalui metode ID2D1RenderTarget::CreateBitmapFromWicBitmap .

Bitmap juga dapat dibuat dari data dalam memori yang disiapkan melalui cara lain. Setelah bitmap dibuat, bitmap dapat digambar oleh metode DrawBitmap target render atau dengan kuas bitmap.

Karena membuat sumber daya bitmap pada target render perangkat keras sering kali merupakan operasi yang mahal, Direct2D dapat memperbarui konten bitmap (atau bagian dari bitmap) dengan menggunakan metode CopyFromBitmap, CopyFromRenderTarget, dan CopyFromMemory . Menggunakan metode ini berpotensi menghemat biaya yang terkait dengan alokasi tekstur GPU tambahan.

Teks Gambar

Direct2D dirancang untuk bekerja dengan operasi teks API teks baru, DirectWrite. Agar menggunakan API DirectWrite lebih sederhana, target render menyediakan tiga metode untuk merender sumber daya teks DirectWrite: DrawText, DrawTextLayout, dan DrawGlyphRun. Karena Direct2D menggunakan GPU untuk proses penyajian teks ClearType, Direct2D menyediakan penggunaan CPU yang lebih rendah daripada GDI untuk operasi teks dan skalabilitas yang lebih baik karena lebih banyak daya pemrosesan GPU tersedia.

ID2D1RenderTarget::D rawText dirancang untuk skenario paling sederhana yang melibatkan penyajian string teks Unicode dengan pemformatan minimal. Tata letak yang lebih kompleks dan fleksibilitas tipografi disediakan melalui metode ID2D1RenderTarget::D rawTextLayout , yang menggunakan objek IDWriteTextLayout untuk menentukan konten dan pemformatan yang akan dirender. IDWriteTextLayout memungkinkan Anda menentukan pemformatan individual untuk substring teks dan opsi tipografi tingkat lanjut lainnya.

Untuk skenario di mana kontrol yang tepat dari tata letak tingkat glyph diperlukan, metode ID2D1RenderTarget::D rawGlyphRun dapat digunakan bersama dengan fasilitas pengukuran yang disediakan oleh DirectWrite.

Untuk menggunakan API DirectWrite, sertakan header dwrite.h. Seperti Direct2D, DirectWrite menggunakan pabrik, IDWriteFactory untuk membuat objek teks. Gunakan fungsi DWriteCreateFactory untuk membuat pabrik, lalu gunakan metode Buat untuk membuat sumber daya DirectWrite (seperti IDWriteTextFormat).

Untuk informasi selengkapnya tentang DirectWrite, lihat topik Memperkenalkan DirectWrite.

Primitif Direct2D

Direct2D mendefinisikan sekumpulan primitif yang mirip dengan yang disediakan oleh API gambar lainnya. Ini menyediakan struktur warna, struktur matriks untuk melakukan transformasi, dan versi titik mengambang dan bilangan bulat titik, persegi panjang, elipsis, dan struktur ukuran. Biasanya, Anda menggunakan versi floating-point dari struktur ini.

Anda tidak menggunakan pabrik atau target render untuk membuat instans primitif Direct2D. Anda dapat membuatnya secara langsung, atau menggunakan metode pembantu yang ditentukan dalam d2d1helper.h untuk membuatnya.

Referensi Direct2D

DirectWrite HelloWorld

Memperkenalkan DirectWrite

Gambaran Umum Sumber Daya

Komponen Pencitraan Windows (WIC)