D3DCompile 函式 (d3dcompiler.h)

將 HLSL 程式代碼或效果檔案編譯成指定目標的位元元組程式代碼。

語法

HRESULT D3DCompile(
  [in]            LPCVOID                pSrcData,
  [in]            SIZE_T                 SrcDataSize,
  [in, optional]  LPCSTR                 pSourceName,
  [in, optional]  const D3D_SHADER_MACRO *pDefines,
  [in, optional]  ID3DInclude            *pInclude,
  [in, optional]  LPCSTR                 pEntrypoint,
  [in]            LPCSTR                 pTarget,
  [in]            UINT                   Flags1,
  [in]            UINT                   Flags2,
  [out]           ID3DBlob               **ppCode,
  [out, optional] ID3DBlob               **ppErrorMsgs
);

參數

[in] pSrcData

類型: LPCVOID

未編譯著色器數據的指標;ASCII HLSL 程式代碼或編譯的效果。

[in] SrcDataSize

類型: SIZE_T

pSrcData 的長度。

[in, optional] pSourceName

類型: LPCSTR

您可以將此參數用於指定錯誤訊息的字串。 如果未使用,請將 設定為 NULL

[in, optional] pDefines

類型: const D3D_SHADER_MACRO*

定義著色器宏之 D3D_SHADER_MACRO 結構的選擇性陣列。 每個宏定義都包含名稱和以 Null 結尾的定義。 如果未使用,請將 設定為 NULL。 陣列中的最後一個結構做為終止符,而且必須將所有成員設定為 NULL

[in, optional] pInclude

類型: ID3DInclude*

選擇性。 ID3DInclude 用於處理包含檔案的指標。 如果著色器包含 #include,將此設定為 NULL 會導致編譯錯誤。 您可以傳遞 D3D_COMPILE_STANDARD_FILE_INCLUDE 宏,這是預設 include 處理程式的指標。 此預設包含處理程式包含相對於目前目錄的檔案,以及相對於初始原始程式檔目錄的檔案。 當您使用 D3D_COMPILE_STANDARD_FILE_INCLUDE 時,必須在 pSourceName 參數中指定來源檔名;編譯程式會從 pSourceName 衍生初始相對目錄。

#define D3D_COMPILE_STANDARD_FILE_INCLUDE ((ID3DInclude*)(UINT_PTR)1)

[in, optional] pEntrypoint

類型: LPCSTR

著色器進入點函式的名稱,其中著色器執行開始。 當您使用 fx 設定文件編譯 (例如,fx_4_0、fx_5_0等等 ) ,D3DCompile 會忽略 pEntrypoint。 在此情況下,建議您將 pEntrypoint 設定為 NULL ,因為如果呼叫的函式不會使用它,最好是將指標參數設定為 NULL 。 針對所有其他著色器配置檔,需要有效的 pEntrypoint

[in] pTarget

類型: LPCSTR

字串,指定要編譯的著色器目標或著色器功能集。 著色器目標可以是著色器模型 2、著色器模型 3、著色器模型 4 或著色器模型 5。 例如,目標也可以是效果類型 (,例如fx_4_1) 。 如需各種配置檔支援的目標相關信息,請參閱 指定編譯程序目標

[in] Flags1

類型: UINT

D3D 編譯常數所定義的旗標。

[in] Flags2

類型: UINT

D3D 編譯效果常數所定義的旗標。 當您編譯著色器而非效果檔案時, D3DCompile 會忽略 Flags2;我們建議您將 Flags2 設定為零,因為如果呼叫的函式不會使用它,則良好的程式設計做法是將非pointer 參數設定為零。

[out] ppCode

類型: ID3DBlob**

可接收 ID3DBlob 介面指標的變數指標,可用來存取編譯的程序代碼。

[out, optional] ppErrorMsgs

類型: ID3DBlob**

可接收 ID3DBlob 介面指標的變數指標,您可以用來存取編譯程式錯誤訊息,如果沒有錯誤,則為 NULL

傳回值

類型: HRESULT

傳回其中一個 Direct3D 11 傳回碼

備註

D3DCompileD3DCompile2 之間的差異在於,後者的方法採用一些選擇性參數,可用來控制位元組程式代碼產生方式的某些層面。 如果不需要這個額外的彈性,則使用 D3DCompile2 沒有效能提升。

規格需求

需求
目標平台 Windows
標頭 d3dcompiler.h
程式庫 d3dcompiler.lib
Dll d3dcompiler_47.dll

請參閱

函式