Изменение настройки одного состояния в D3D11 - PullRequest
7 голосов
/ 25 июля 2011

Может показаться, что API-интерфейс D3D11 немного неуклюж, или я не правильно его использую.

Правда ли, что это минимальный набор шагов для изменения состояния одного растеризатора в D3D11 (Iв качестве примера использую переход в режим каркасного рендеринга)

  // variables to hold the current rasterizer state and its description
  ID3D11RasterizerState * rState ;
  D3D11_RASTERIZER_DESC rDesc ;

  // cd3d is the ID3D11DeviceContext  
  cd3d->RSGetState( &rState ) ; // retrieve the current state
  rState->GetDesc( &rDesc ) ;    // get the desc of the state
  rDesc.FillMode = D3D11_FILL_WIREFRAME ; // change the ONE setting

  // create a whole new rasterizer state
  // d3d is the ID3D11Device
  d3d->CreateRasterizerState( &rDesc, &rState ) ;

  cd3d->RSSetState( rState );    // set the new rasterizer state

Кажется, намного длиннее, чем 9

  cd3d->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME ) ;

1 Ответ

7 голосов
/ 06 сентября 2011

Или вы можете оставить состояние desc 'global' для своего кода или класса, а затем просто изменить режим заполнения и установить его с помощью RSSetState (с исходным состоянием с новым изменением)? Вместо получения и настройки.

...