8

看起来D3D11的api有点笨拙,或者我没有正确使用它。

这是真的,这是在 D3D11 中更改单个光栅化器状态的最小步骤集吗(我以更改线框模式渲染为例)

  // 保存当前光栅化器状态及其描述的变量
  ID3D11RasterizerState * rState ;
  D3D11_RASTERIZER_DESC rDesc ;

  // cd3d 是 ID3D11DeviceContext  
  cd3d->RSGetState( &rState ) ; // 获取当前状态
  rState->GetDesc( &rDesc ) ; // 获取状态的描述
  rDesc.FillMode = D3D11_FILL_WIREFRAME ; // 更改 ONE 设置

  // 创建一个全新的光栅化器状态
  // d3d 是 ID3D11Device
  d3d->CreateRasterizerState( &rDesc, &rState ) ;

  cd3d->RSSetState(rState); // 设置新的光栅化状态

好像比9长很多

  cd3d->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
4

1 回答 1

7

或者您可以将状态描述“全局”保留在您的代码或类中,然后只需更改填充模式并使用 RSSetState 进行设置(原始状态带有新的更改)?而不是检索和设置。

于 2011-09-05T21:03:11.263 回答