2011-07-24 13 views
7

que parece que la API de D3D11 es un poco torpe, o yo no lo estoy usando derecha.Cambio de un solo ajuste en estado D3D11

¿Es cierto que este es el conjunto mínimo de pasos para cambiar un estado único de trama en D3D11 (estoy usando el cambio de la prestación modo alámbrico como un ejemplo)

 
    // 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 

Parece mucho más tiempo que el 9 de

 
    cd3d->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME) ; 
+0

no se olvide de liberar la instancia Rstate después de llamar RSSetState para evitar una pérdida de memoria. – mchiasson

Respuesta

7

o usted podría mantener el estado desc 'global' a su código o clase, entonces simplemente cambiar el FILLMODE y establecer con RSSetState (con el estado original con el nuevo cambio)? En lugar de recuperar y configurar

+0

Sí. Cuanto más uso D3D11, más me doy cuenta _que quieren que administre el estado con mucho cuidado_. Básicamente te obliga a utilizar [bloques de estado que estaban disponibles en d3d9] (http://msdn.microsoft.com/en-us/library/bb206121 (VS.85) .aspx), pero nunca los utilicé – bobobobo

Cuestiones relacionadas