處理 Direct3D 9 ()
控制碼提供有效率的方法,可參考 識別碼為 ID3DXEffectCompiler 或 ID3DXEffect的技術、傳遞、注釋和參數。 當您呼叫 Get[Parameter] 表單的函式時,就會動態產生它們注釋|函式|技術|Pass][ByName|BySemantic|Element]。
執行程式時,每次產生相同物件的控制碼會傳回相同的控制碼。 但是,當您多次執行程式時,不要依賴控制碼保持常數。 另請注意,由 ID3DXEffect 和 ID3DXEffectCompiler 的不同實例所產生的控制碼會不同。
如果您檢視標頭檔,您會發現 (D3DXHANDLEs) 是技術上字串指標。
您傳入 GetParameter[ByName| 等函式的控制碼元素|BySemantic] 或 GetAnnotation[ByName] 可以有三種形式,如下所示:
- GetParameter[ByName| 等函式所傳回的控制碼元素|BySemantic]。
- MyVariableName、MyTechniqueName 或 MyArray[0] 等字串。
- 控制碼 = 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");
相關主題