處理 Direct3D 9 ()

控制碼提供有效率的方法,可參考 識別碼為 ID3DXEffectCompilerID3DXEffect的技術、傳遞、注釋和參數。 當您呼叫 Get[Parameter] 表單的函式時,就會動態產生它們注釋|函式|技術|Pass][ByName|BySemantic|Element]。

執行程式時,每次產生相同物件的控制碼會傳回相同的控制碼。 但是,當您多次執行程式時,不要依賴控制碼保持常數。 另請注意,由 ID3DXEffectID3DXEffectCompiler 的不同實例所產生的控制碼會不同。

如果您檢視標頭檔,您會發現 (D3DXHANDLEs) 是技術上字串指標。

您傳入 GetParameter[ByName| 等函式的控制碼元素|BySemantic] 或 GetAnnotation[ByName] 可以有三種形式,如下所示:

  1. GetParameter[ByName| 等函式所傳回的控制碼元素|BySemantic]。
  2. MyVariableName、MyTechniqueName 或 MyArray[0] 等字串。
  3. 控制碼 = Null。 有四種情況。
    • 如果是方法傳回值,則方法找不到控制碼。
    • 如果將 Null 控制碼當做 GetParameter[ByName 的第一個參數傳入元素|BySemantic],函式會傳回最上層參數。 相反地,如果控制碼不是Null,函式會傳回控制碼所識別的結構成員或專案。
    • 如果將 Null 控制碼當做 ValidateTechnique 的第一個引數或 IsParameterUsed 的第二個引數傳入,則會驗證目前的技術。
    • 如果將 Null 控制碼當做 FindNextValidTechnique 的第一個引數傳入,則搜尋有效的技術會從效果的第一個技術開始。

效能提示 在應用程式開始時,執行初始化傳遞以從字串產生控制碼。 從該點開始,只使用控制碼。 傳入字串而不是產生的控制碼會變慢。

範例

以下是使用 Get[Parameter| 的一些範例注釋|函式|技術|Pass][ByName|BySemantic|元素] 用來產生控制碼的函式。

// 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"); 

效果格式