关于CEGUI渲染状态的恢复

        CEGUI在渲染完了之后,会更改DX的渲染状态,但是并不会恢复过来,于是如果此时再用DX渲染的话,就会出现混乱了,网上看了很多,但是写的都不对,这里是经本人测试切实可用的代码,其中CEGUI 版本为0.7.1

// Revert RenderState
m_pDirect3DDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
m_pDirect3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
m_pDirect3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
m_pDirect3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
m_pDirect3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

m_pDirect3DDevice->SetTextureStageState( 0 , D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pDirect3DDevice->SetTextureStageState( 0 , D3DTSS_COLORARG2, D3DTA_DIFFUSE );
m_pDirect3DDevice->SetTextureStageState( 0 , D3DTSS_COLOROP, D3DTOP_SELECTARG1 );

       在用DX进行渲染之前执行下之前的代码,就可以用了,如果还不行的话可以参考CEGUIDirect3D9Renderer.cpp里头的 beginRendering() 这个函数,CEGUI更改过的所有的渲染状态都在这里了,呵呵。