套用 Direct3D 10 (技術)
宣告並初始化常數、紋理和著色器狀態後,唯一要做的事就是在裝置中設定效果狀態。
在裝置中設定非著色器狀態
某些管線狀態未由效果設定。 例如,清除轉譯目標會準備資料的轉譯目標。 在裝置中設定效果狀態之前,以下是清除輸出緩衝區的範例。
// Clear the render target and depth stencil
float ClearColor[4] = { 0.0f, 0.25f, 0.25f, 0.55f };
ID3D10RenderTargetView* pRTV = DXUTGetD3D10RenderTargetView();
pd3dDevice->ClearRenderTargetView( pRTV, ClearColor );
ID3D10DepthStencilView* pDSV = DXUTGetD3D10DepthStencilView();
pd3dDevice->ClearDepthStencilView( pDSV, D3D10_CLEAR_DEPTH, 1.0, 0 );
在裝置中設定效果狀態
設定效果狀態是藉由在轉譯迴圈內套用效果狀態來完成。 這是從 外部完成的。 也就是說,請選取一項技術,然後根據您所需的結果) ,為每個傳遞設定狀態 (。
D3D10_TECHNIQUE_DESC techDesc;
pRenderTechnique->GetDesc( &techDesc );
for( UINT p = 0; p < techDesc.Passes; ++p )
{
}
....
pRenderTechnique->GetPassByIndex( p )->Apply(0);
pd3dDevice->DrawIndexed( (UINT)pSubset->IndexCount, 0,
(UINT)pSubset->VertexStart );
}
}
效果不會轉譯任何專案,它只會將效果狀態設定為裝置。 轉譯程式碼會在效果狀態更新裝置狀態之後呼叫。 在此範例中,DrawIndexed 呼叫會執行轉譯。
相關主題