PFND3DDDI_DRAWTRIPATCH fungsi panggilan balik (d3dumddi.h)

Fungsi DrawTriPatch menggambar patch segitiga baru atau cache atau memperbarui spesifikasi patch yang ditentukan sebelumnya.

Sintaks

PFND3DDDI_DRAWTRIPATCH Pfnd3dddiDrawtripatch;

HRESULT Pfnd3dddiDrawtripatch(
  [in] HANDLE hDevice,
       const D3DDDIARG_DRAWTRIPATCH *unnamedParam2,
       const D3DDDITRIPATCH_INFO *unnamedParam3,
       const FLOAT *unnamedParam4
)
{...}

Parameter

[in] hDevice

Handel ke perangkat tampilan (konteks grafis).

unnamedParam2

pData [in]

Penunjuk ke struktur D3DDDIARG_DRAWTRIPATCH yang menggambarkan patch segitiga untuk digambar.

unnamedParam3

pInfo [in]

Pilihan. Penunjuk ke struktur D3DDDITRIPATCH_INFO yang menjelaskan informasi tentang patch segitiga.

unnamedParam4

pPatch [in]

Pilihan. Penunjuk ke buffer yang berisi tiga nilai floating-point (D3DFLOAT[3]) yang menyediakan jumlah segmen untuk masing-masing dari tiga tepi patch segitiga.

Menampilkan nilai

DrawTriPatch mengembalikan S_OK atau hasil kesalahan yang sesuai jika patch segitiga tidak berhasil digambar.

Keterangan

Ketika runtime Microsoft Direct3D memanggil fungsi DrawTriPatch driver tampilan mode pengguna, secara opsional dapat menyediakan informasi dalam parameter pInfo dan pPatch . Runtime mengatur bendera di anggota Bendera dari struktur D3DDDIARG_DRAWTRIPATCH yang ditentukan oleh pData untuk menunjukkan apakah ia memasok informasi opsional ini.

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

Nilai aktual dalam Handle 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 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 DrawTriPatch-nya :

  • Jika anggota Handle adalah nol, patch bersifat dinamis. Driver tidak boleh melakukan prakomute atau informasi cache untuk patch. Dalam situasi ini, runtime meneruskan penunjuk ke struktur D3DDDITRIPATCH_INFO dalam parameter pInfo dan mengatur bendera RTPATCHFLAG_HASINFO di anggota Bendera struktur D3DDDIARG_DRAWTRIPATCH untuk menunjukkan keberadaan struktur D3DDDITRIPATCH_INFO di pInfo. Secara opsional, runtime juga dapat mengatur bendera RTPATCHFLAG_HASSEGS di Bendera untuk menunjukkan keberadaan informasi segmen yang ditentukan parameter pPatch . Namun, jika runtime tidak menyediakan informasi segmen di pPatch, runtime harus menggunakan nilai status render D3DRS_PATCHSEGMENTS.
  • Jika nilai Handel bukan nol belum ditentukan sebelumnya dalam panggilan sebelumnya ke fungsi DrawTriPatch 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 DrawTriPatch 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 render D3DRS_PATCHSEGMENTS.
  • Jika nilai Handel bukan nol telah ditentukan sebelumnya dalam panggilan sebelumnya ke fungsi DrawTriPatch driver dan bendera RTPATCHFLAG_HASINFO diatur, runtime memperbarui definisi untuk patch. Runtime meneruskan pointer ke struktur D3DDDITRIPATCH_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 render D3DRS_PATCHSEGMENTS.
  • Jika nilai Handel bukan nol telah ditentukan sebelumnya dalam panggilan sebelumnya ke fungsi DrawTriPatch driver dan bendera RTPATCHFLAG_HASINFO tidak diatur, runtime menggambar ulang patch. Driver harus menggunakan informasi 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 meskipun menggunakan patch 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_DRAWTRIPATCH

D3DDDI_DEVICEFUNCS