goo talks -


볼 때마다 헷갈리는 SetRenderState




01: ////  !! Needs three textures.
02: //// !! Texture set with ID 0 should be a alpha map for clipping render target rectangle.
03: //// !! Texture set with ID 1 should be a render target texture.
04: //// !! Texture put into blit should be a viewport frame.
05: pDev->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );
06: pDev->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
07: pDev->SetRenderState( D3DRS_TEXTUREFACTOR, 0xFFFFFFFF );
08: pDev->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
09: pDev->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTOP_DISABLE );
10: pDev->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SUBTRACT );//// inverse alpha value
11: pDev->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TFACTOR );
12: pDev->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE );
13:
14: pDev->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
15: pDev->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
16: pDev->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_MODULATE );//// apply alpha map ( ID 0 ) with render target ( ID 1 )
17: pDev->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_CURRENT );
18: pDev->SetTextureStageState( 1, D3DTSS_ALPHAARG2, D3DTA_TEXTURE );
19: pDev->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
20:
21: pDev->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
22: pDev->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
23: pDev->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_NONE );
24: pDev->SetTexture( 0ul, pMiniView->pMVTextureAlpha );
25: pDev->SetTexture( 1ul, g_pMiniViewManager->GetMiniViewRenderTarget()->GetTexture() );