Code:
void CTerrain::Render(D3DXMATRIX trans,float fTimeDelta)
{
m_pDevice->SetTransform(D3DTS_WORLD, &trans);
m_pDevice->SetStreamSource(0,m_pVB,0,sizeof(TerrainVertex));
m_pDevice->SetIndices(m_pIB);
m_pDevice->SetFVF(TerrainVertex::FVF);
m_pDevice->SetTexture(0,m_pLand);
m_pDevice->SetTexture(1,m_pDetail);
m_pDevice->SetTexture(2,m_pLight);
m_pDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_CURRENT);
m_pDevice->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_ADDSIGNED);
m_pDevice->SetTextureStageState(1,D3DTSS_ALPHAARG1,D3DTA_CURRENT);
m_pDevice->SetTextureStageState(1,D3DTSS_ALPHAARG2,D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(1,D3DTSS_ALPHAOP,D3DTOP_ADD);
m_pDevice->SetTextureStageState(2,D3DTSS_COLORARG1,D3DTA_CURRENT);
m_pDevice->SetTextureStageState(2,D3DTSS_COLORARG2,D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(2,D3DTSS_COLOROP,D3DTOP_MODULATE);
m_pDevice->SetTextureStageState(2,D3DTSS_ALPHAARG1,D3DTA_CURRENT);
m_pDevice->SetTextureStageState(2,D3DTSS_ALPHAARG2,D3DTA_TEXTURE);
m_pDevice->SetTextureStageState(2,D3DTSS_ALPHAOP,D3DTOP_MODULATE);
m_pDevice->SetTextureStageState(3,D3DTSS_COLOROP,D3DTOP_DISABLE);
m_pDevice->SetTextureStageState(3,D3DTSS_ALPHAOP,D3DTOP_DISABLE);
m_pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,
0,0,m_iNumVerts,
0,m_iNumTris);
}