PFND3DDDI_DRAWRECTPATCH fungsi panggilan balik (d3dumddi.h)

Fungsi DrawRectPatch menggambar patch persegi panjang baru atau cache atau memperbarui spesifikasi patch yang ditentukan sebelumnya.

Sintaks

PFND3DDDI_DRAWRECTPATCH Pfnd3dddiDrawrectpatch;

HRESULT Pfnd3dddiDrawrectpatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWRECTPATCH *unnamedParam2,
       const D3DDDIRECTPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Parameter

[in] hDevice

Handel ke perangkat tampilan (konteks grafis).

unnamedParam2

pData [in]

Penunjuk ke struktur D3DDDIARG_DRAWRECTPATCH yang menjelaskan patch persegi panjang untuk menggambar.

unnamedParam3

pInfo [in]

Pilihan. Penunjuk ke struktur D3DDDIRECTPATCH_INFO yang menjelaskan informasi tentang patch persegi panjang.

unnamedParam4

pPatch [in]

Pilihan. Penunjuk ke buffer yang berisi empat nilai floating-point (D3DFLOAT[4]) yang menyediakan jumlah segmen untuk masing-masing dari empat tepi patch persegi panjang.

Menampilkan nilai

DrawRectPatch mengembalikan S_OK atau hasil kesalahan yang sesuai jika patch persegi panjang tidak berhasil digambar.

Keterangan

Ketika runtime Microsoft Direct3D memanggilpPatch fungsi DrawRectPatch driver tampilan mode pengguna, itu dapat secara opsional menyediakan informasi dalam pInfo dan parameter. Runtime menetapkan bendera di anggota Bendera dari struktur D3DDDIARG_DRAWRECTPATCH yang ditentukan oleh pData untuk menunjukkan apakah ia menyediakan informasi opsional ini.

Runtime memasok nilai UINT di anggota Handle D3DDDIARG_DRAWRECTPATCH untuk merujuk ke permukaan patch. Setiap kali runtime menggambar ulang permukaan patch, runtime tersebut melewati nilai handel patch dan tidak diperlukan untuk menentukan kembali struktur data D3DDDIRECTPATCH_INFO untuk permukaan patch. Driver tampilan mode pengguna dapat melakukan prakomponen dan cache koefisien perbedaan maju dan informasi lainnya. Oleh karena itu, panggilan berikutnya ke fungsi DrawRectPatch driver yang menggunakan nilai handel patch yang sama berjalan lebih efisien.

Nilai aktual dalam Handel ditentukan oleh aplikasi dan tidak berada di bawah kontrol runtime. Oleh karena itu, driver harus menangani nilai apa pun yang dapat ditentukan oleh UINT.

Nilai Handle khusus nol menunjukkan bahwa patch bersifat dinamis; oleh karena itu, driver tidak dapat melakukan prakomute atau informasi cache untuk patch. Nilai bukan nol untuk Handle menunjukkan bahwa patch bersifat statis (atau diperbarui dengan frekuensi rendah); oleh karena itu, driver dapat melakukan prakomute dan menyimpan informasi untuk patch.

Driver harus menangani skenario berikut dalam fungsi DrawRectPatch-nya :

  • Jika anggota Handle adalah nol, patch bersifat dinamis. Driver tidak boleh melakukan prakompres atau informasi cache untuk patch. Dalam situasi ini, runtime meneruskan penunjuk ke struktur D3DDDIRECTPATCH_INFO dalam parameter pInfo dan mengatur bendera RTPATCHFLAG_HASINFO di anggota Bendera struktur D3DDDIARG_DRAWRECTPATCH untuk menunjukkan adanya struktur D3DDDIRECTPATCH_INFO di pInfo. Secara opsional, runtime juga dapat mengatur bendera RTPATCHFLAG_HASSEGS di Bendera untuk menunjukkan keberadaan informasi segmen yang ditentukan oleh parameter pPatch . Namun, jika runtime tidak menyediakan informasi segmen di pPatch, runtime harus menggunakan nilai status D3DRS_PATCHSEGMENTS render.
  • Jika nilai Handel bukan nol belum ditentukan sebelumnya dalam panggilan sebelumnya ke fungsi DrawRectPatch driver, runtime menarik patch baru yang dapat di-cache. Driver harus mengalokasikan memori untuk menyimpan data yang di-cache dan harus menambahkan data ini ke tabel handel patch-nya. Karena runtime belum menggambar patch ini sebelumnya, runtime harus mengatur bendera RTPATCHFLAG_HASINFO dan meneruskan penunjuk ke struktur D3DDDIRECTPATCH_INFO dalam parameter pInfo . Driver harus memeriksa bendera RTPATCHFLAG_HASINFO untuk memverifikasi keberadaan informasi patch. Jika tidak ada informasi patch yang ditentukan, driver harus mengabaikan panggilan DrawRectPatch dan tidak boleh mengalokasikan memori untuk data yang di-cache dalam tabel handel patch-nya. Secara opsional, runtime dapat mengatur bendera RTPATCHFLAG_HASSEGS untuk menunjukkan keberadaan informasi segmen. Namun, jika runtime tidak menyediakan informasi segmen di pPatch, runtime harus menggunakan nilai status D3DRS_PATCHSEGMENTS render.
  • Jika nilai Handle nonzero telah ditentukan sebelumnya dalam panggilan sebelumnya ke fungsi DrawRectPatch driver dan bendera RTPATCHFLAG_HASINFO diatur, runtime memperbarui definisi untuk patch. Runtime meneruskan pointer ke struktur D3DDDIRECTPATCH_INFO dalam parameter pInfo , dan driver harus mengolah ulang dan mencache ulang informasi patch. Secara opsional, runtime dapat mengatur bendera RTPATCHFLAG_HASSEGS untuk menunjukkan keberadaan informasi segmen. Namun, jika runtime tidak menyediakan informasi segmen di pPatch, runtime harus menggunakan nilai status D3DRS_PATCHSEGMENTS render.
  • Jika nilai Handle bukan nol telah ditentukan sebelumnya dalam panggilan sebelumnya ke fungsi DrawRectPatch driver dan bendera RTPATCHFLAG_HASINFO tidak diatur, runtime menguraikan ulang patch. Driver harus menggunakan informasi yang di-cache untuk menggambar patch. Dalam situasi ini, driver mengabaikan aliran vertex saat ini, dan informasi cache digunakan sebagai gantinya. Namun, runtime masih dapat menentukan informasi segmen baru; oleh karena itu, driver harus memeriksa bendera RTPATCHFLAG_HASSEGS dan menangani informasi segmen yang ditentukan bahkan jika menggunakan patch yang di-cache.
Driver menerima pemberitahuan untuk merilis informasi patch yang di-cache melalui status render D3DRS_DELETERTPATCH. Nilai status render ini adalah patch yang akan dihapus.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows Vista dan versi yang lebih baru dari sistem operasi Windows.
Target Platform Desktop
Header d3dumddi.h (termasuk D3dumddi.h)

Lihat juga

D3DDDIARG_DRAWRECTPATCH

D3DDDI_DEVICEFUNCS