struktur D3DHAL_DP2TEXBLT (d3dhal.h)

Struktur D3DHAL_DP2TEXBLT digunakan untuk blt tekstur ketika D3dDrawPrimitives2 merespons token perintah D3DDP2OP_TEXBLT.

Sintaks

typedef struct _D3DHAL_DP2TEXBLT {
  DWORD dwDDDestSurface;
  DWORD dwDDSrcSurface;
  POINT pDest;
  RECTL rSrc;
  DWORD dwFlags;
} D3DHAL_DP2TEXBLT;

Anggota

dwDDDestSurface

Menentukan handel ke tekstur tujuan.

dwDDSrcSurface

Menentukan handel ke tekstur sumber.

pDest

Menentukan titik tujuan tempat blt harus dilakukan, yaitu, titik di permukaan tujuan (dwDDDestSurface) untuk memulai blt. Anggota x dan y struktur POINT ini ditentukan dalam koordinat layar.

rSrc

Menentukan persegi panjang yang akan di-blit dalam tekstur sumber, yaitu persegi panjang sumber di permukaan sumber (dwDDSrcSurface) untuk blt dari.

dwFlags

Dicadangkan untuk penggunaan sistem.

Keterangan

Panggilan balik D3dCreateSurfaceEx membuat handel bilangan bulat kecil ke tekstur yang dapat digunakan sebagai tekstur sumber dan tujuan untuk blt tekstur.

Struktur D3DHAL_DP2TEXBLT digunakan dengan token aliran perintah D3DDP2OP_TEXBLT untuk memberi tahu driver untuk melakukan operasi blt dari tekstur sumber ke tekstur tujuan. Tekstur juga bisa menjadi peta lingkungan kubik. Driver harus menyalin persegi panjang yang ditentukan oleh rSrc dalam tekstur sumber ke lokasi yang ditentukan oleh pDest dalam tekstur tujuan. Tekstur tujuan dan sumber diidentifikasi oleh handel yang diberitahukan driver selama waktu pembuatan tekstur. Jika driver mampu mengelola tekstur, maka ada kemungkinan handel tujuan adalah 0. Ini menunjukkan kepada driver bahwa ia harus memuat tekstur ke dalam memori video (atau di mana pun perangkat keras secara efisien bertekstur). Dalam hal ini, driver dapat mengabaikan rSrc dan pDest.

Perhatikan bahwa untuk tekstur yang dipetakan MIP, hanya satu instruksi D3DDP2OP_TEXBLT yang dimasukkan ke dalam aliran perintah D3dDrawPrimitives2 . Dalam hal ini, driver diharapkan untuk mem-blt semua tingkat peta MIP yang ada dalam tekstur. Wilayah yang akan disalin dalam sublevel peta MIP dapat diperoleh dengan membagi rSrc danpDest sebesar 2 di setiap tingkat.

Ada kemungkinan bahwa tekstur sumber dan tujuan mungkin berisi jumlah tingkat peta MIP yang berbeda. Dalam hal ini, driver diharapkan untuk blt tingkat umum. Misalnya, jika tekstur sumber 256x256 memiliki 8 tingkat peta MIP, dan jika tujuannya adalah tekstur 64x64 dengan 6 tingkat, maka driver harus mem-blt 6 tingkat yang sesuai dari sumbernya. Driver dapat mengharapkan dimensi tingkat MIP teratas tekstur tujuan selalu kurang dari atau sama dengan dimensi tingkat MIP teratas dari tekstur sumber.

Perhatikan bahwa handel sumber dan tujuan selalu merujuk ke permukaan tingkat atas dan tidak pernah ke sublevel peta MIP apa pun. Karena kesalahan dalam aplikasi, ada kemungkinan tekstur tujuan berisi tingkat peta MIP tambahan. Misalnya, tekstur sumber 256x256 mungkin berisi lima tingkat, tetapi tekstur 256x256 tujuan mungkin berisi delapan. Driver diharapkan untuk menangani kasus ini dengan aman, tetapi tidak diharapkan untuk menghasilkan hasil yang benar. Karena masalah kompatibilitas aplikasi warisan, Direct3D tidak mencegah pasangan tekstur sumber/tujuan tersebut diteruskan ke driver.

Driver dapat mengharapkan format piksel tekstur sumber dan tujuan identik dan, secara umum, blt yang ditentukan aman untuk dilakukan. Selain kasus tunggal yang disebutkan di atas, driver seharusnya tidak mengharapkan untuk disajikan dengan situasi apa pun yang membuatnya tidak mungkin untuk melakukan blt.

Jika driver ingin melakukan blt asinkron dari memori sistem ke memori video, maka itu harus mengimplementasikan panggilan DIRECTDraw HAL GetSysmemBltStatus, jika tidak, inkonsistensi mungkin muncul.

Dengan TexBlt, driver tidak perlu melakukan sinkronisasi apa pun karena TexBlts selalu dikeluarkan dalam urutan yang tepat bersama dengan perintah penyajian. Sebelum ini, driver perlu menangani kasus dengan benar ketika blt DirectDraw memodifikasi tekstur apa pun yang direferensikan oleh perintah penyajian dalam konteks Direct3D apa pun. Saat beberapa konteks ada, Direct3D tidak mengeluarkan TexBlts. Ini berarti bahwa penulis driver dapat menghilangkan kode sinkronisasi di jalur kode TexBlt (tetapi masih perlu disinkronkan untuk blt).

Sampel

Pseudocode berikut menunjukkan bagaimana subrektangle harus dihitung untuk tingkat MIP berturut-turut, untuk masuk ke tingkat MIP i + 1 dari tingkat MIP i:

rect.left >>= 1; 
rect.top >>= 1; 
DWORD right = (rect.right + 1) >> 1; 
DWORD bottom = (rect.bottom + 1) >> 1; 
rect.right = ((right - rect.left) < 1) ? 
    (rect.left + 1) : (right); 
rect.bottom = ((bottom - rect.top ) < 1) ? 
    (rect.top + 1) : (bottom);

Persyaratan

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

Lihat juga

D3DDP2OP_TEXBLT

D3dCreateSurfaceEx

D3dDrawPrimitives2