Dukungan Klien Tingkat Rendah Grafis
[Fungsi-fungsi ini dapat berubah dengan setiap revisi sistem operasi. Sebagai gantinya, gunakan Microsoft DirectDraw dan Microsoft Direct3DAPIs; API ini mengisolasi aplikasi dari perubahan sistem operasi tersebut, dan menyembunyikan banyak kesulitan lain yang terlibat dalam berinteraksi langsung dengan driver tampilan. Untuk informasi selengkapnya, lihat Pengantar Tampilan.]
DirectDraw dan Direct3D menggunakan beberapa rutinitas mode kernel untuk berkomunikasi dengan sistem operasi dan driver tampilan.
Kernel sistem operasi tampaknya merupakan driver tampilan DirectDraw/Direct3D dari sudut pandang komponen mode pengguna. Beberapa perbedaan antara kernel dan driver tampilan memang ada. Komponen mode kernel menyimpan salinan struktur yang mewakili objek DirectDraw/Direct3D, seperti perangkat dan permukaan. Komponen mode pengguna DirectDraw/Direct3D meminta pembuatan struktur tersebut, yang disebut dengan handel yang dikembalikan oleh mode kernel. Akibatnya, perbedaan sebagian besar dalam argumen yang diteruskan ke rutinitas: kernel menerima handel sedangkan driver biasanya menerima pointer.
- Evolusi Titik Masuk Mode Kernel
- Memanggil Kernel
- Menulis Aplikasi Portabel
- Pembuatan Perangkat
- Objek Kernel
- Fungsi
- Topik terkait
Evolusi Titik Masuk Mode Kernel
DirectDraw membuat semua koneksinya ke mode kernel melalui Gdi32.dll menggunakan beberapa titik masuk. Titik masuk ini biasanya hanya parameter marshal. Sebagai bagian dari pembuatan perangkat, Gdi32.dll mengembalikan pointer ke rutinitas dalam dirinya sendiri yang kemudian digunakan oleh DirectDraw dan Direct3D 7.0.
Direct3D 8.x membuat istirahat bersih dari Gdi32.dll, dan panggilan ke titik masuk mode kernel secara langsung.
Memanggil Kernel
Titik masuk ini serupa dan, dalam banyak kasus, identik dengan titik masuk dalam driver tampilan itu sendiri, sehingga pemahaman tentang materi Driver Development Kit (DDK) untuk DirectDraw dan Direct3D adalah prasyarat penting untuk menggunakan fungsi-fungsi ini.
Memanggil fungsi-fungsi ini berbeda antara sistem operasi. Pada Windows 2000, W2KUMODE. Pustaka LIB berisi rutinitas yang memungkinkan utas panggilan untuk melakukan transisi ke mode kernel. Rutinitas ini tidak melakukan marshalling parameter, dan merupakan mekanisme panggilan yang ideal pada Windows 2000. Mekanisme yang membuat transisi ke mode kernel bergantung pada urutan tabel. Pemesanan ini akan berubah di seluruh revisi sistem operasi. Oleh karena itu, tidak disarankan untuk membangun aplikasi yang bergantung pada W2KUMODE. LIB untuk Windows 2000 dan mengharapkannya untuk menjalankan tidak dimodifikasi pada Windows XP. Mekanisme untuk membuat portabilitas sistem operasi dijelaskan di bagian berikut.
Pada Windows XP, D3D8THK.DLL mengekspor semua fungsi mode kernel, tetapi dengan nama yang sedikit dihiasi. Contoh berikut menunjukkan bagaimana aplikasi dapat alias fungsi klien tingkat rendah menggunakan praprosesor. Sebelum melakukan ini, tautkan secara dinamis ke D3D8THK.DLL.
#define NtGdiDdUnlock OsThunkDdUnlock
#include "ntgdi.h" // Brings in the definition of "NtGdiDdUnlock",
. // which is now seen as OsThunkDdUnlock.
.
.
OsThunkDdUnlock(hSurface, puUnlockData);
Menulis Aplikasi Portabel
Beberapa teknik tersedia untuk membuat aplikasi portabel di seluruh sistem operasi. Yang paling kuat adalah menginstal paket Microsoft DirectX 8.x redistributable pada Windows 2000 sebagai bagian dari proses penginstalan aplikasi Anda sendiri. Ini menjamin bahwa D3D8THK.DLL akan tersedia pada sistem Windows 2000 dan memungkinkan satu jalur kode dalam aplikasi, karena Anda dapat menggunakan teknik yang sama seperti yang dijelaskan untuk Windows XP di atas.
Aplikasi juga dapat membangun DLL isolasi mereka sendiri dan menerapkan dua versi DLL tersebut, satu untuk Windows 2000 menggunakan teknik yang ditunjukkan di atas dan satu untuk Windows XP yang menggunakan D3D8THK.DLL.
Pembuatan Perangkat
DirectDraw dan Direct3D terlebih dahulu harus membuat instans abstraksi kernel objek driver. Dalam Gdi32.dll dan Ddraw.dll, ini dicapai dengan memanggil DdCreateDirectDrawObject, DdQueryDirectDrawObject dan DdReenableDirectDrawObject. Di Direct3D 8.x, ini dicapai dengan memanggil NtGdiDdCreateDirectDrawObject, NtGdiDdQueryDirectDrawObject dan NtGdiDdReenableDirectDrawObject. Perhatikan bahwa titik masuk GdiEntry* hanyalah marshaller untuk titik masuk mode kernel.
Setelah memanggil fungsi-fungsi ini, handel dikembalikan yang mewakili abstraksi objek kernel dari perangkat DirectDraw. Objek kernel ini mewakili instans driver yang dimiliki oleh driver tampilan. Handel ini dapat digunakan dalam panggilan berikutnya seperti DdCreateSurfaceObject (atau NtGdiDdCreateSurfaceObject di Direct3D 8.x) untuk membangun objek lebih lanjut.
Objek Kernel
Beberapa titik masuk digunakan untuk mengelola representasi mode kernel objek tertentu. DdCreateSurfaceObject (atau NtGdiDdCreateSurfaceObject di Direct3D 8.x) adalah contoh yang baik. Titik masuk ini membuat objek mode kernel yang mewakili sepotong memori sistem. Titik entri mengembalikan handel, dan handel ini dapat digunakan dalam panggilan gambar berikutnya. Kernel memperoleh penunjuk ke strukturnya sendiri dari handel ini, dan meneruskan penunjuk tersebut ke driver tampilan, yang kemudian melakukan operasi.
Fungsi
Tabel ini mencantumkan fungsi yang mewakili titik masuk mode kernel, dan rutinitas pembantu mode pengguna dalam Gdi32.dll yang membungkus titik masuk ini.
Topik | Konten |
---|---|
DdAttachSurface | Fungsi DdAttachSurface melampirkan dua representasi permukaan mode kernel. |
DdCreateDIBSection | Membuat struktur DIBSECTION yang berbagi tabel warnanya dengan perangkat. GdiEntry9 #defined sebagai alias untuk fungsi ini. |
DdCreateDirectDrawObject | Wrapper untuk fungsi NtGdiDdCreateDirectDrawObject dan membuat representasi sisi kernel dari objek DirectDraw. Handel untuk representasi ini akan disimpan di pDirectDrawGlobal-hDD>. GdiEntry1 didefinisikan sebagai alias untuk fungsi ini. |
DdCreateSurfaceObject | Pembungkus untuk fungsi NtGdiDdCreateSurfaceObject dan membuat objek permukaan mode kernel. GdiEntry4 didefinisikan sebagai alias untuk fungsi ini. |
DdDeleteDirectDrawObject | Wrapper untuk fungsi NtGdiDdDeleteDirectDrawObject dan menghapus objek DirectDraw mode kernel yang sebelumnya dibuat menggunakan DdCreateDirectDrawObject. GdiEntry3 didefinisikan sebagai alias untuk fungsi ini. |
DdDeleteSurfaceObject | Pembungkus untuk fungsi NtGdiDdDeleteSurfaceObject dan menghapus objek permukaan mode kernel yang sebelumnya dibuat oleh NtGdiDdCreateSurfaceObject. GdiEntry5 didefinisikan sebagai alias untuk fungsi ini. |
DdGetDC | Wrapper untuk fungsi NtGdiDdGetDC dan mengembalikan konteks perangkat Windows Graphics Device Interface (GDI) (DC) yang mewakili permukaan DirectDraw yang ditunjukkan. GdiEntry7 didefinisikan sebagai alias untuk fungsi ini. |
DdGetDxHandle | DdGetDxHandle mengembalikan handel Microsoft DirectX API mode kernel untuk digunakan dalam panggilan berikutnya ke titik masuk mode kernel yang mengontrol mekanisme API DirectX. |
DdQueryDirectDrawObject | Pembungkus untuk fungsi NtGdiDdQueryDirectDrawObject dan mengkueri representasi mode kernel yang dibuat sebelumnya untuk kemampuan. GdiEntry2 didefinisikan sebagai alias untuk fungsi ini. |
DdQueryDisplay Pengaturan Uniqueness | Mengembalikan nilai bilangan bulat saat ini yang ditambahkan setiap kali sakelar mode terjadi, seperti ketika ada sakelar desktop, Sakelar Pengguna Cepat, atau kotak Microsoft MS-DOS layar penuh. Aplikasi dapat memanggil fungsi ini berulang kali dan membandingkan nilai lama dan baru dari nilai pengembalian untuk menentukan apakah pengaturan tampilan telah berubah. GdiEntry13 didefinisikan sebagai alias untuk fungsi ini. |
DdReenableDirectDrawObject | Wrapper untuk fungsi NtGdiDdReenableDirectDrawObject. Ini mengaktifkan kembali instans driver DirectDraw setelah peristiwa gaya sakelar mode seperti sakelar mode benar, tampilan kotak MS-DOS layar penuh, atau perubahan driver tampilan. GdiEntry10 didefinisikan sebagai alias untuk fungsi ini. |
DdReleaseDC | Wrapper untuk fungsi NtGdiDdReleaseDC dan merilis DC yang sebelumnya diperoleh melalui DdGetDC atau GdiEntry7. GdiEntry8 didefinisikan sebagai alias untuk fungsi ini. |
DdResetVisrgn | Pembungkus untuk fungsi NtGdiDdResetVisrgn dan memungkinkan informasi mode pengguna yang tepat waktu pada wilayah kliping untuk windows di desktop. GdiEntry6 didefinisikan sebagai alias untuk fungsi ini. |
DdSetGammaRamp | Fungsi DdSetGammaRamp mengatur gamma ramp untuk perangkat. |
DdSwapTextureHandles | Dikembangkan untuk antarmuka driver perangkat (DDI) sebelum Microsoft DirectDraw 7.0 dan tidak melakukan apa pun pada sistem Microsoft Windows NT. Semua parameter diabaikan. GdiEntry16 didefinisikan sebagai alias untuk fungsi ini. |
DdUnattachSurface | Fungsi DdUnattachSurface menghapus lampiran, dibuat dengan DdAttachSurface, antara dua objek permukaan mode kernel. |
NtGdiD3DContextCreate | Membuat konteks. |
NtGdiD3DContextDestroy | Menghapus konteks yang ditentukan. |
NtGdiD3DContextDestroyAll | Mengkueri jumlah memori kosong dalam tumpukan memori yang dikelola driver. |
NtGdiD3DDrawPrimitives2 | Merender primitif dan mengembalikan status render yang diperbarui. |
NtGdiD3DGetDriverState | Digunakan oleh runtime DirectDraw dan Direct3D untuk mendapatkan informasi dari driver tentang statusnya saat ini. |
NtGdiD3DValidateTextureStageState | Mengembalikan jumlah pass tempat perangkat keras dapat melakukan operasi blending yang ditentukan dalam status saat ini. |
NtGdiDdAddAlphaBlt | Tidak diterapkan. |
NtGdiDdAddAttachedSurface | Melampirkan permukaan ke permukaan lain. |
NtGdiDdAttachSurface | Melampirkan dua representasi permukaan mode kernel. |
NtGdiDdBeginMoCompFrame | Mulai mendekode bingkai baru. |
NtGdiDdBlt | Melakukan transfer bit-block. |
NtGdiDdCanCreateD3DBuffer | Menentukan apakah driver dapat membuat perintah tingkat driver atau buffer vertex dari deskripsi yang ditentukan. |
NtGdiDdCanCreateSurface | Menunjukkan apakah driver dapat membuat permukaan deskripsi permukaan yang ditentukan. |
NtGdiDdColorControl | Mengontrol kontrol luminasi dan kecerahan permukaan overlay. |
NtGdiDdCreateD3DBuffer | Digunakan untuk membuat perintah tingkat driver atau buffer vertex dari deskripsi yang ditentukan. |
NtGdiDdCreateDirectDrawObject | Membuat representasi sisi kernel dari objek DirectDraw. |
NtGdiDdCreateMoComp | Memberi tahu driver bahwa dekoder perangkat lunak akan mulai menggunakan kompensasi gerakan dengan GUID yang ditentukan. |
NtGdiDdCreateSurface | Melampirkan permukaan ke permukaan lain. |
NtGdiDdCreateSurfaceEx | Membuat permukaan Direct3D dari permukaan DirectDraw dan mengaitkan nilai handel yang diminta ke permukaan tersebut. |
NtGdiDdCreateSurfaceObject | Membuat objek permukaan mode kernel yang mewakili objek permukaan mode pengguna yang direferensikan oleh puSurfaceLocal. |
NtGdiDdDeleteDirectDrawObject | Menghancurkan objek perangkat DirectDraw mode kernel yang dibuat sebelumnya. |
NtGdiDdDeleteSurfaceObject | NtGdiDdDeleteSurfaceObject menghapus objek permukaan mode kernel yang dibuat sebelumnya. |
NtGdiDdDestroyD3DBuffer | Menghancurkan objek permukaan DirectDraw mode kernel yang dialokasikan sebelumnya yang dibuat dengan anggota dwCaps dari struktur DDSCAPS yang diatur ke DDSCAPS_EXECUTEBUFFER. |
NtGdiDdDestroyMoComp | Memberi tahu driver bahwa objek kompensasi gerakan ini tidak akan lagi digunakan. Driver sekarang perlu melakukan pembersihan yang diperlukan. |
NtGdiDdDestroySurface | Menghancurkan objek permukaan DirectDraw mode kernel yang dialokasikan sebelumnya. |
NtGdiDdEndMoCompFrame | Menyelesaikan bingkai yang didekodekan. |
NtGdiDdFlip | Menyebabkan memori permukaan yang terkait dengan target dan permukaan saat ini dipertukarkan. |
NtGdiDdFlipToGDISurface | Memberi tahu driver ketika DirectDraw membalik ke atau dari permukaan GDI. |
NtGdiDdGetAvailDriverMemory | Mengkueri jumlah memori kosong di semua tumpukan memori video. |
NtGdiDdGetBltStatus | Mengkueri status blit dari permukaan yang ditentukan. |
NtGdiDdGetDC | Membuat DC untuk permukaan yang ditentukan. |
NtGdiDdGetDriverInfo | Mengkueri driver untuk fungsionalitas DirectDraw dan Direct3D tambahan yang didukung driver. |
NtGdiDdGetDxHandle | Mengembalikan handel DIRECTX API mode kernel untuk digunakan dalam panggilan berikutnya ke titik entri mode kernel yang mengontrol mekanisme API DirectX. |
NtGdiDdGetFlipStatus | Menentukan apakah flip yang terakhir diminta pada permukaan telah terjadi. |
NtGdiDdGetInternalMoCompInfo | Memungkinkan driver melaporkan bahwa ia secara internal mengalokasikan memori tampilan untuk melakukan kompensasi gerakan. |
NtGdiDdGetMoCompBuffInfo | Memungkinkan driver menentukan berapa banyak permukaan sementara yang diperlukan untuk mendukung GUID yang ditentukan, dan ukuran, lokasi, dan format masing-masing permukaan ini. |
NtGdiDdGetMoCompFormats | Menunjukkan format yang tidak dikompresi tempat perangkat keras dapat mendekode data. |
NtGdiDdGetMoCompGuids | Mengambil jumlah GUID yang didukung driver. |
NtGdiDdGetScanLine | Mengembalikan jumlah baris pemindaian fisik saat ini. |
NtGdiDdLock | Mengunci area memori permukaan tertentu dan menyediakan pointer yang valid ke blok memori yang terkait dengan permukaan. |
NtGdiDdLockD3D | Digunakan untuk mengunci area memori buffer tertentu dan untuk menyediakan pointer yang valid ke blok memori yang terkait dengan buffer. |
NtGdiDdQueryDirectDrawObject | Mengkueri representasi mode kernel yang dibuat sebelumnya dari objek DirectDraw untuk kemampuannya. |
NtGdiDdQueryMoCompStatus | Mengkueri status operasi penyajian terbaru ke permukaan yang ditentukan. |
NtGdiDdReenableDirectDrawObject | Mengaktifkan kembali objek perangkat mode kernel DirectDraw setelah pengalihan mode. |
NtGdiDdReleaseDC | Merilis DC yang dibuat sebelumnya untuk objek permukaan DirectDraw mode kernel yang ditunjukkan. |
NtGdiDdRenderMoComp | Memberi tahu driver tentang macroblock apa yang akan dirender dengan menentukan permukaan yang berisi macroblock, offset di setiap permukaan tempat macroblock ada, dan ukuran data makroblock yang akan dirender. |
NtGdiDdResetVisrgn | Digunakan untuk mengaktifkan mode pengguna untuk mendapatkan pemahaman yang valid tentang wilayah kliping untuk windows di desktop. Kliping ini dapat berubah secara asinkron dari sudut pandang utas mode pengguna. |
NtGdiDdSetColorKey | Mengatur nilai kunci warna untuk permukaan yang ditentukan. |
NtGdiDdSetExclusiveMode | Memberi tahu driver ketika aplikasi DirectDraw beralih ke atau dari mode eksklusif. |
NtGdiDdSetGammaRamp | Mengatur ramp gamma untuk perangkat. |
NtGdiDdSetOverlayPosition | Mengatur posisi untuk overlay. |
NtGdiDdUnattachSurface | Menghapus lampiran, dibuat dengan NtGdiDdAttachSurface, antara dua objek permukaan mode kernel. |
NtGdiDdUnlock | Melepaskan kunci yang ditahan pada permukaan yang ditentukan. |
NtGdiDdUnlockD3D | Digunakan untuk melepaskan kunci yang ditahan pada area memori buffer tertentu. |
NtGdiDdUpdateOverlay | Reposisi atau memodifikasi atribut visual permukaan overlay. |
NtGdiDdWaitForVerticalBlank | Mengembalikan status kosong vertikal perangkat. |
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk