小祥的blog

游戏开发
随笔 - 11, 文章 - 0, 评论 - 7, 引用 - 0
数据加载中……

恢复CEGUI渲染状态

                                              恢复CEGUI渲染状态

刚刚接触CEGUI,在原D3D程序上画了一个小窗口后,发现渲染效果于以前的大相径庭,查看了源代码后发现,原来CEGUI在渲染后并没有恢复到默认的渲染状态,于是改之,再编译、运行、一切正常。。。

下面是恢复其渲染状态的代码,与初始化渲染状态函数initPerFrameStates()对应

 1 void  DirectX9Renderer::UnitFrameStates()
 2 {
 3      //  setup vertex stream
 4
 5     d_device -> SetFVF(NULL);
 6
 7      //  set device states
 8     d_device -> SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
 9      d_device -> SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
10     d_device -> SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
11     d_device -> SetRenderState(D3DRS_ZWRITEENABLE, TRUE);
12     d_device -> SetRenderState(D3DRS_FOGENABLE, FALSE);
13     d_device -> SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
14
15
16      //  setup texture addressing settings/*
17     d_device -> SetSamplerState(  0 , D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
18      d_device -> SetSamplerState(  0 , D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
19
20      //  setup colour calculations
21     d_device -> SetTextureStageState( 0 , D3DTSS_COLORARG1, D3DTA_TEXTURE);
22      d_device -> SetTextureStageState( 0 , D3DTSS_COLORARG2, D3DTA_CURRENT);
23      d_device -> SetTextureStageState( 0 , D3DTSS_COLOROP, D3DTOP_SELECTARG1);
24
25      //  setup alpha calculations
26     d_device -> SetTextureStageState( 0 , D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
27      d_device -> SetTextureStageState( 0 , D3DTSS_ALPHAARG2, D3DTA_CURRENT);
28      d_device -> SetTextureStageState( 0 , D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
29
30      //  setup filtering
31     d_device -> SetSamplerState( 0 , D3DSAMP_MINFILTER, D3DTEXF_POINT);
32      d_device -> SetSamplerState( 0 , D3DSAMP_MAGFILTER, D3DTEXF_POINT);
33
34      //  disable texture stages we do not need.
35     d_device -> SetTextureStageState( 1 , D3DTSS_COLOROP, D3DTOP_DISABLE);
36
37      //  setup scene alpha blending
38     d_device -> SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
39      d_device -> SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
40      d_device -> SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
42 }

另外CEGUI有2种渲染模式:立即渲染和缓冲渲染。所以在这2种渲染模式结束后都需要调用上面的代码以恢复渲染状态

版权声明:本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!
小祥的BLOG http://xfxsworld.cnblogs.com

posted on 2007-11-17 14:56 小祥 阅读(242) 评论(0)  编辑 收藏 网摘 所属分类: CEGUI


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: