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
