天天看點

DirectX HLSL相關基礎

DirectX中HLSL相關基礎,主要是相關方法的使用介紹。

DirectX HLSL相關

  

  頂點着色器可用軟體頂點運算方式來模拟,即在建立裝置時,将裝置行為标記設定為:

  D3DCREATE_SOFTWARE_VERTEXPROCESSING

  在記事本中編寫着色器代碼,使用函數D3DXCompileShaderFromFile對着色器檔案進行編譯。

  每個着色器都用常量表來存儲其變量。

  為了使應用程式能夠通路着色器的常量表,D3DX庫提供了接口ID3DXConstantTable

  擷取常量的句柄:

  D3DXHANDLE ID3DXConstantTable :: GetConstantByName (D3DXHANDLE hConstant,LPSTR pName);

  常量的設定:

HREST ID3DXConstantTable :: SetXXX(
LPDIRECT3DDEVICE9 pDevice,
D3DXHANDLE hConstant,
XXX value);      

  如果要對數組進行設定:

HREST ID3DXConstantTable :: SetVectorArray(
LPDIRECT3DDEVICE9 pDevice,
D3DXHANDLE hConstant,
CONST D3DXVECTOR4* pVector,
UINT Count);      

  設定常量的預設值:

  HRESULT ID3DXConstantTable:: SetDefaults(LPDIRECT3DDEVICE pDevice);

  頂點聲明的建立:

HRESULT CreateVertexDeclaration(
CONST D3DVERTEXELEMENT9* pVertexElements,
IDirect3DVertexDeclaration9** ppDecl)      

  建立一種效果:

HRESULT D3DXCreateEffectFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
CONST D3DXMACRO *pDefines,
LPD3DXINCLUDE pInclude,
DWORD Flags,
LPD3DXEFFECTPOOL pPool,
LPD3DXEFFECT *ppEffect,
LPD3DXBUFFER *ppCompilationErrors);      

  擷取效果檔案中的變量:

D3DXHANDLE ID3DXEffect::GetParameterByName(
D3DXHANDLE hParameter,
LPCSTR pName);      

使用頂點着色器的步驟:

  1.編寫頂點着色器程式,并進行編譯。

  2.建立一個IDirect3DVertexShader9 接口的對象,以表示基于所編譯的着色器代碼的頂點着色器。

  3.用IDirect3DDevice9::SetVertexShader方法啟用頂點着色器。

使用像素着色器的步驟:

  1.編寫像素着色器程式并進行編譯。

  2.建立一個IDirect3DPixelShader9接口對象,以表示基于經過編譯的着色器代碼的像素着色器。

  3.用IDirect3DDevice::SetPixelShader方法啟用像素着色器。

使用一種效果:

  1.擷取效果檔案中您希望使用的手法(technique)的句柄。

  D3DXHANDLE ID3DXEffect ::GetTechniqueByName(LPCSTR pName);

  2.激活希望使用的手法。

  HRESULT ID3DXEffect :: SetTechnique(D3DXHANDLE hTechnique);

  (激活之前需要用目前裝置對其進行驗證)

  HRESULT ID3DXEffect ::ValidateTechnique(D3DXHANDLE hTechnique);

  3.啟用目前處于活動狀态的手法。

  HRESULT ID3DXEffect :: Begin(UINT * pPasses, DWORD Flags);

  4.對于活動手法中的每一條繪制路徑,繪制幾何目标體。

  一種手法(Technique)可能包含多條路徑(pass),是以我們必須在每條繪制路徑中将幾何體繪制一次。

  HRESULT ID3DXEffect ::BeginPass(UINT Pass);

  HRESULT EndPass();

  5.終止目前處于活動狀态的手法。

  HRESULT ID3DXEffect :: End(VOID);

作者: 聖騎士Wind

出處: 部落格園: 聖騎士Wind

Github: https://github.com/mengdd

微信公衆号: 聖騎士Wind

DirectX HLSL相關基礎

繼續閱讀