Bagikan melalui


struktur D3DHAL_DP2DRAWTRIPATCH (d3dhal.h)

DirectX 8.0 dan versi yang lebih baru saja.

D3DHAL_DRAWTRIPATCH diurai dari buffer perintah oleh panggilan balik D3dDrawPrimitives2 ketika anggota bCommand struktur D3DHAL_DP2COMMAND diatur ke D3DDP2OP_DRAWTRIPATCH, dan digunakan untuk merender patch segitiga.

Sintaks

typedef struct _D3DHAL_DP2DRAWTRIPATCH {
  DWORD Handle;
  DWORD Flags;
} D3DHAL_DP2DRAWTRIPATCH;

Anggota

Handle

Menentukan handel yang terkait dengan permukaan.

Flags

Menentukan apa, jika ada, informasi tambahan mengikuti struktur data D3DHAL_DP2DRAWTRIPATCH dalam aliran DP2.

Keterangan

Anggota Handle digunakan untuk mengaitkan permukaan dengan handel, sehingga saat berikutnya permukaan ini digambar tidak perlu menentukan ulang struktur data D3DTRIPATCH_INFO untuk patch ini. Ini memungkinkan driver untuk melakukan prakomputasi dan cache koefisien perbedaan maju dan/atau informasi lainnya, yang pada gilirannya memungkinkan token D3DDP2OP_DRAWTRIPATCH berikutnya menggunakan handel yang sama untuk dijalankan dengan lebih efisien. D3DTRIPATCH_INFO dijelaskan dalam dokumentasi DirectX SDK terbaru.

Nilai aktual Handle ditentukan oleh aplikasi dan tidak berada di bawah kontrol runtime. Oleh karena itu, driver harus siap untuk mengatasi nilai apa pun yang dapat ditentukan oleh DWORD. Nilai handel khusus nol berarti bahwa patch bersifat dinamis dan tidak ada titik prakomputasi atau penembolokan informasi untuk patch ini. Nilai subzero untuk Handle berarti patch statis (atau diperbarui dengan frekuensi rendah) dan prakomputasi dan penembolokan dimungkinkan.

Anggota Bendera digunakan untuk mengomunikasikan informasi tambahan apa, jika ada, mengikuti struktur data D3DHAL_DP2DRAWTRIPATCH dalam aliran DP2. Jika RTPATCHFLAG_HASSEGS ditentukan, maka tiga nilai floating-point mengikuti D3DHAL_DP2DRAWTRIPATCH di aliran DP2. Float ini memberikan jumlah segmen untuk masing-masing dari tiga tepi patch segitiga dan mengambil alih nilai status render D3DRS_PATCHSEGMENTS. Jika RTPATCHFLAG_HASINFO ditentukan, struktur data D3DTRIPATCH_INFO mengikuti aliran DP2. Jika kedua bendera ditentukan, tiga float yang menentukan jumlah segmen mengikuti D3DHAL_DP2DRAWTRIPATCH dan struktur D3DTRIPATCH_INFO mengikuti nilai floating-point.

Ada empat skenario yang harus ditangani driver saat memproses D3DDP2OP_DRAWTRIPATCH.

Jika Handle adalah nol, maka patch bersifat dinamis dan tidak ada prakomputasi atau penembolokan yang harus dilakukan. Dalam hal ini, D3DTRIPATCH_INFO mengikuti D3DHAL_DP2DRAWTRIPATCH dalam aliran DP2 (dan bendera RTPATCHFLAG_HASINFO diatur untuk menunjukkan keberadaan struktur data D3DTRIPATCH_INFO). Secara opsional, RTPATCHFLAG_HASSEGS juga dapat diatur untuk menunjukkan keberadaan informasi segmen. Namun, jika ini dihilangkan, nilai status render D3DRS_PATCHSEGMENTS harus digunakan sebagai gantinya.

Jika Handle adalah subzero dan nilai handel belum ditentukan oleh D3DDP2OP_DRAWTRIPATCH sebelumnya, ini menunjukkan bahwa patch baru yang dapat di-cache sedang digambar. Driver harus mengalokasikan memori untuk menyimpan data yang di-cache dan menambahkan data ini ke tabel handel patch-nya. Karena patch ini belum terlihat sebelumnya, bendera RTPATCHFLAG_HASINFO harus diatur dan struktur D3DTRIPATCH_INFO harus diikuti dalam aliran DP2. Runtime tidak menjamin ini, bagaimanapun, dan driver harus memverifikasi keberadaan informasi patch dengan menguji bendera. Jika tidak ada informasi yang ditentukan, token ini harus diabaikan dan tidak ada handel yang harus dialokasikan dalam tabel handel patch driver. Secara opsional, RTPATCHFLAG_HASSEGS juga dapat diatur untuk menunjukkan keberadaan informasi segmen. Namun, jika ini dihilangkan, nilai status render D3DRS_PATCHSEGMENTS harus digunakan sebagai gantinya.

Jika Handle adalah subzero, nilai handel telah ditentukan oleh token D3DDP2OP_DRAWTRIPATCH sebelumnya, dan bidang Bendera berisi RTPATCHFLAG_HASINFO, maka definisi untuk patch sedang diperbarui. Struktur data D3DTRIPATCH_INFO mengikuti aliran DP2 dan driver harus menggunakannya untuk mengolah ulang dan mencache ulang informasi patch. Secara opsional, RTPATCHFLAG_HASSEGS juga dapat diatur untuk menunjukkan keberadaan informasi segmen. Namun, jika ini dihilangkan, nilai status render D3DRS_PATCHSEGMENTS harus digunakan sebagai gantinya.

Jika Handle adalah subzero, nilai handel telah ditentukan oleh token D3DDP2OP_DRAWTRIPATCH sebelumnya, dan bidang Bendera tidak berisi RTPATCHFLAG_HASINFO, maka informasi yang di-cache harus digunakan untuk menggambar patch. Dalam hal ini, aliran puncak saat ini diabaikan; informasi yang di-cache harus digunakan sebagai gantinya. Namun, masih mungkin dalam hal ini untuk informasi segmen baru yang akan ditentukan. 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 bahwa informasi patch yang di-cache dirilis melalui status render D3DRS_DELETERTPATCH. Nilai status render ini adalah patch yang akan dihapus.

Persyaratan

Persyaratan Nilai
Header d3dhal.h (termasuk D3dhal.h)

Lihat juga

D3DDP2OP_DRAWTRIPATCH

D3DHAL_DP2COMMAND

D3DHAL_DP2DRAWRECTPATCH

D3DRS_DELETERTPATCH

D3dDrawPrimitives2