如何使用多个着色器状态?

How to use multiple shader states?

例如,如果我想使用 ID3D11RasterizerState 并将 CullMode 设置为 D3D11_CULL_BACK,然后我想在运行时将其更改为 D3D11_CULL_FRONT,最好的方法是什么?我为每个选项创建一个状态并在运行时设置正确的状态,但这很麻烦,因为我需要为每个组合设置很多不同的着色器状态。在运行时从着色器中检索描述(例如 ID3D11DepthStencilState::GetDesc())并动态更改它是一个不错的选择吗?

通常,您会为每个要使用的状态组合创建一个光栅化器状态。设置活动状态是一个非常便宜的操作——它创建了昂贵的状态对象。

Note in DirectX 12 you have to put all states into each Pipeline State Object so that means every possible permutation of states, shaders, and render target format/configuration will result in the need for a new PSO.