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

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.

 

Alokasi Buffer Perintah dan Puncak

Pengantar Tampilan