关于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更改过的所有的渲染状态都在这里了,呵呵。

CEGUI与DX(Direct3D)渲染的冲突问题

今天在工程里直接调用D3D的API画了一个旋转的三角体(可以理解为金字塔),但是一调用CEGUI的渲染之后,金字塔就无法渲染出来,只要不调用 CEGUI::System的renderGUI(),就可以渲染出来,所以觉得应该是跟CEGUI内部渲染有冲突。

 

查了下网上的资料,果然有反映说CEGUI更改了渲染状态,但没有改回来导致渲染失败。看了下CEGUI的源码,如下: 继续阅读