Handel (Direct3D 9)

Handel menyediakan cara yang efisien untuk mereferensikan teknik, pass, anotasi, dan parameter dengan ID3DXEffectCompiler atau ID3DXEffect. Mereka dihasilkan secara dinamis saat Anda memanggil fungsi formulir Get[Parameter| Anotasi| Fungsi| Teknik| Pass][ByName| BySemantic| Elemen].

Saat menjalankan program, menghasilkan handel ke objek yang sama beberapa kali akan mengembalikan handel yang sama kembali setiap saat. Tetapi jangan mengandalkan penanganan tetap konstan ketika Anda menjalankan program Anda beberapa kali. Perlu diketahui juga bahwa menangani yang dihasilkan oleh berbagai instans ID3DXEffect dan ID3DXEffectCompiler akan berbeda.

Jika Anda melihat file header, Anda akan melihat bahwa handel (D3DXHANDLEs) adalah penunjuk string secara teknis.

Handel yang Anda berikan ke fungsi seperti GetParameter[ByName| Elemen| BySemantic] atau GetAnnotation[ByName] dapat dalam tiga bentuk sebagai berikut:

  1. Handel yang dikembalikan oleh fungsi seperti GetParameter[ByName| Elemen| BySemantic].
  2. String seperti MyVariableName, MyTechniqueName, atau MyArray[0].
  3. Handel = NULL. Ada empat kasus.
    • Jika ini adalah nilai pengembalian metode, metode gagal menemukan handel.
    • Jika handel NULL diteruskan sebagai parameter pertama GetParameter[ByName| Elemen| BySemantic], fungsi mengembalikan parameter tingkat atas. Sebaliknya, jika handel bukan NULL, fungsi mengembalikan anggota struktur atau elemen yang diidentifikasi oleh handel.
    • Jika handel NULL diteruskan sebagai argumen pertama validateTechnique atau argumen kedua IsParameterUsed, teknik saat ini divalidasi.
    • Jika handel NULL diteruskan sebagai argumen pertama findNextValidTechnique, pencarian teknik yang valid dimulai pada teknik pertama dalam efek.

Tips performa Di awal aplikasi Anda, lakukan pass inisialisasi untuk menghasilkan handel dari string. Sejak saat itu, gunakan hanya handel. Meneruskan string alih-alih handel yang dihasilkan lebih lambat.

Contoh

Berikut adalah beberapa contoh menggunakan Get[Parameter| Anotasi| Fungsi| Teknik| Pass][ByName| BySemantic| Elemen] berfungsi untuk menghasilkan handel.

// Gets handle of second top-level parameter handle in the effect file
h1 = GetParameter(NULL, 1);    

// Gets handle of the third struct member of MyStruct
h2 = GetParameter("MyStruct", 2); 

// Gets handle of the third array element handle of MyArray
h3 = GetParameterElement("MyArray", 2); 

// Gets handle of first member of h1 (that is, the second top-level param)
h4 = GetParameter(h1, 0);    

// Gets handle of MyStruct.Data
h5 = GetParameterByName("MyStruct", "Data");    
// or 
h6 = GetParameterByName(NULL, "MyStruct.Data");    

// Gets handle of MyStruct.Data.SubData
h7 = GetParameterByName("MyStruct.Data", "SubData"); 
// or 
h8 = GetParameterByName(NULL, "MyStruct.Data.SubData");

// Gets handle of fifth annotation of h1 (that is, second top-level param)
h9 = GetAnnotation(h1, 4);    

// Gets handle of MyStruct's annotation, called Author
h10 = GetAnnotationByName("MyStruct", "Author");  
// or
h11 = GetParameterByName(NULL, "MyStruct@Author"); 

Format Efek