Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Direct2D menyediakan API, mirip dengan Direct3D, untuk digunakan dengan C atau C++. API mengekspos 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 penghalusan tepi.
- 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. Ini berisi bagian berikut:
- Direct2D Header Files
- Antarmuka Direct2D
- Antarmuka ID2D1Factory
- Target Render
- Sumber Daya Gambar
- Teks Gambar
- Primitif Direct2D
- Topik terkait
Berkas Header Direct2D
API Direct2D ditentukan oleh file header berikut.
| File header | Deskripsi |
|---|---|
| d2d1.h | Menentukan versi C dan C++ dari API Direct2D utama. |
| d2d1helper.h | Menentukan fungsi, kelas, dan struktur pembantu C++. |
| d2dbasetypes.h | Menentukan primitif gambar untuk Direct2D, seperti titik dan persegi panjang. Header ini disertakan dalam d2d1.h. |
| d2derr.h | Menentukan kode kesalahan untuk Direct2D. Header ini disertakan dalam 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 API Direct2D untuk Windows 8 dan yang lebih baru. |
| d2d1effecthelpers.h | Menentukan fungsi pembantu C++, kelas, dan struktur efek gambar bagian dari API Direct2D 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 API Direct2D.
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
AntarmukaID2D1Factory 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 mendefinisikan sekumpulan metode Create* (di mana * adalah tempat penampung untuk nama sumber 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, dijelaskan di bagian berikut.
Target Render
Render target adalah sumber daya yang mewarisi dari antarmuka ID2D1RenderTarget. Target render menciptakan sumber daya untuk menggambar dan melaksanakan operasi menggambar. Ada beberapa jenis target render yang dapat digunakan untuk merender grafik dengan cara berikut:
- ID2D1HwndRenderTarget objek merender konten ke jendela.
- ID2D1DCRenderTarget objek merender ke konteks perangkat GDI.
- Objek target render bitmap 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.
Fitur Target Tampilan
Anda dapat menentukan apakah target render harus menggunakan akselerasi perangkat keras dan apakah tampilan jarak jauh harus dirender oleh komputer lokal atau jarak jauh. Sasaran rendering dapat disiapkan untuk rendering yang dialiaskan atau dengan antialisasi. 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 menggambar agar dapat digabungkan bersama saat merender frame. Untuk beberapa skenario, ini dapat 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 rendering luar layar sementara sambil mempertahankan berbagai properti target render yang telah ditetapkan pada target render asli.
Dimungkinkan juga untuk merender menggunakan GDI pada target render Direct2D dengan memanggil QueryInterface pada target render untuk ID2D1GdiInteropRenderTarget, yang memiliki GetDC dan metode ReleaseDC di atasnya 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.
Merender 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
- Sikat
- Lapisan
- Jerat
Perintah Menggambar
Untuk merender konten, Anda menggunakan metode menggambar 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 Draw dan Fill untuk merender sumber daya penggambaran. Sebagian besar metode Menggambar dan Mengisi mengambil bentuk (baik primitif maupun geometri) dan kuas untuk mengisi atau menggambar garis luar bentuk.
Target render juga menyediakan metode untuk mengklip, menerapkan masker opasitas, dan mengubah ruang koordinat.
Direct2D menggunakan sistem koordinat tangan kiri: nilai sumbu x positif bergerak ke kanan dan nilai sumbu y positif bergerak ke bawah.
Penanganan Kesalahan
Perintah gambar target render tidak menunjukkan apakah operasi yang diminta berhasil. Untuk mengetahui apakah ada kesalahan menggambar, panggil target render metode Flush atau metode EndDraw untuk mendapatkan HRESULT.
Sumber Daya Menggambar
Bagian berikut menjelaskan beberapa sumber daya yang dapat dibuat oleh target render dan antarmuka pabrik.
Sikat
Kuas, yang diwakili oleh antarmukaID2D1Brush, 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 penuh, yang lain dengan gradasi atau gambar. Direct2D menyediakan empat jenis kuas:
- ID2D1SolidColorBrush melukis area dengan warna solid.
- ID2D1LinearGradientBrush melukis area dengan gradien linier yang memadukan dua warna atau lebih di seluruh garis, sumbu gradien.
- ID2D1RadialGradientBrush melukis area dengan gradien radial yang memadukan dua warna atau lebih di sekitar elips.
- ID2D1BitmapBrush digunakan untuk melukis area dengan bitmap.
Untuk membuat kuas, Anda menggunakan salah satu metode ID2D1RenderTarget::Create*Brush (di mana * adalah tempat penampung untuk beberapa nama kuas), seperti CreateRadialGradientBrush. Kuas dapat digunakan dengan metode Draw dan Fill pada target render, baik untuk melukis garis tepi atau kerangka bentuk, atau sebagai masker transparansi.
Untuk informasi selengkapnya tentang kuas, lihat Gambaran Umum Kuas.
Geometri
Selain primitif gambar dasar seperti titik, persegi panjang, dan elipsis, Direct2D menyediakan antarmukaID2D1Geometry untuk menjelaskan bentuk sederhana dan kompleks. Antarmuka yang mewarisi dari ID2D1Geometry menentukan berbagai jenis bentuk, sepertiID2D1RectangleGeometryuntuk mewakili persegi panjang, ID2D1RoundedRectangleGeometry untuk mewakili persegi panjang bulat, dan ID2D1EllipseGeometry untuk mewakili elipsis.
Bentuk yang lebih kompleks dapat dibuat dengan menggunakan antarmukaID2D1GeometrySink untuk menentukan serangkaian gambar yang terdiri dari garis, kurva, dan busur. ID2D1GeometrySink diteruskan ke metode Open dari 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 melebarkan 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 terikat, menghitung area atau panjang geometri, dan menginterpolasi lokasi di sepanjang geometri. Direct2D juga menyediakan kemampuan untuk membuat jala segitiga yang ditesselasi dari geometri.
Untuk membuat geometri, Anda menggunakan salah satu metode ID2D1Factory::Create*Geometry (di mana * adalah tempat penampung untuk beberapa nama geometri), seperti CreatePathGeometry. Geometri adalah sumber daya yang tidak bergantung pada 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 Windows Imaging Component (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 target render metode DrawBitmap 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 bitmap) dengan menggunakan CopyFromBitmap, CopyFromRenderTarget, dan metode CopyFromMemory. Menggunakan metode ini berpotensi menghemat biaya yang terkait dengan alokasi tekstur GPU tambahan.
Menggambar Teks
Direct2D dirancang untuk bekerja dengan operasi teks API teks baru, DirectWrite. Untuk membuat penggunaan 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::DrawText dirancang untuk skenario paling sederhana yang mempertimbangkan rangkaian teks Unicode dengan pemformatan minimal. Tata letak yang lebih kompleks dan fleksibilitas tipografi disediakan melalui metode ID2D1RenderTarget::DrawTextLayout, 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 atas tata letak tingkat glif diperlukan, metode ID2D1RenderTarget::DrawGlyphRun 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 fungsiDWriteCreateFactory 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 factory atau target render untuk menginisialisasi primitif Direct2D. Anda dapat membuatnya secara langsung, atau menggunakan metode pembantu yang ditentukan dalam d2d1helper.h untuk membuatnya.
Topik terkait