<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_KlayGE游戏引擎</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/40077/rss</id><updated>2012-02-09T05:15:50Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/40077/rss"/><entry><id>http://www.cnblogs.com/gongminmin/archive/2012/02/09/2343798.html</id><title type="text">HLSL bytecode to GLSL编译器的第一步</title><summary type="text">转载请注明出处为KlayGE游戏引擎，本文地址为http://www.klayge.org/2012/02/09/hlsl-bytecode-to-glsl%e7%bc%96%e8%af%91%e5%99%a8%e7%9a%84%e7%ac%ac%e4%b8%80%e6%ad%a5/从KlayGE 4.0开始，不但有为了下一版本开发的短期任务，还有一些中长期研发的任务。其中之一就是HLSL bytecode to GLSL编译器。 现在KlayGE里的shader主要由HLSL写成，通过#ifdef的土办法兼容Cg。对D3D11来说可以直接使用，但对于OpenGL和 OpenGL ES 2就得</summary><published>2012-02-09T05:16:00Z</published><updated>2012-02-09T05:16:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2012/02/09/2343798.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2012/02/09/2343798.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span dir="ltr"&gt;转载请注明出处为&lt;a href="http://www.klayge.org/2012/02/09/hlsl-bytecode-to-glsl%e7%bc%96%e8%af%91%e5%99%a8%e7%9a%84%e7%ac%ac%e4%b8%80%e6%ad%a5/%home_url%"&gt;KlayGE游戏引擎&lt;/a&gt;，本文地址为&lt;a href="http://www.klayge.org/2012/02/09/hlsl-bytecode-to-glsl%e7%bc%96%e8%af%91%e5%99%a8%e7%9a%84%e7%ac%ac%e4%b8%80%e6%ad%a5/"&gt;http://www.klayge.org/2012/02/09/hlsl-bytecode-to-glsl%e7%bc%96%e8%af%91%e5%99%a8%e7%9a%84%e7%ac%ac%e4%b8%80%e6%ad%a5/&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从KlayGE 4.0开始，不但有为了下一版本开发的短期任务，还有一些中长期研发的任务。其中之一就是&lt;a href="http://www.klayge.org/trac/ticket/56"&gt;HLSL bytecode to GLSL编译器&lt;/a&gt;。 现在KlayGE里的shader主要由HLSL写成，通过#ifdef的土办法兼容Cg。对D3D11来说可以直接使用，但对于OpenGL和 OpenGL ES 2就得大费周折了。那种情况下，shader需要经过Cg编译器编译成传统的GLSL，在经过我自己的token级别的编译器转换成现代的GLSL，然后 才能使用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;为什么不直接用Cg？看看Cg runtime在ATI卡上的表现吧。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;为什么不用传统的GLSL？NV的驱动有一套attribute和index之间的绑定规则，比如gl_Position一定是 0，gl_Normal一定是6（或者某个数，但是个常量），而且无法通过API来获取预定义attribute的index。这套规则在ATI卡上是不 可用的。现代的GLSL没有预定义的attribute和varing（除了position），所以都可以给定attribute名来获取index， 兼容性好得多。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;所以，这里更好的解决方案是把不通过Cg编译器，就把HLSL编译成GLSL。目前有一些能做到这件事情的库，比如AMD的hlsl2glsl（已经停止开发），unity的&lt;a href="https://github.com/aras-p/hlsl2glslfork" target="_blank"&gt;hlsl2glsl fork&lt;/a&gt;（从AMD的发展而来），以及&lt;a href="http://icculus.org/mojoshader/" target="_blank"&gt;mojoshader&lt;/a&gt;。他们的问题在于，只支持到了SM3，对KlayGE来说连最低要求都没达到。只能自己做一个编译器。&lt;/p&gt;&#xD;
&lt;p&gt;如果需要把HLSL直接编译成GLSL，就需要做HLSL的解析等事，既麻烦又不能保证效率。所以我选择了把HLSL编译产生的bytecode解 析出来，生成GLSL。因为HLSL-&amp;gt;bytecode可以直接用现成的编译器，省了很多麻烦。（即便是linux上，也可以用wine来执行 d3dx的HLSL编译）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;方案明确后，步骤也就能很快定义出来：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt;D3D11 bytecode反汇编&lt;/li&gt;&#xD;
     &lt;li&gt;VS/PS to GLSL&lt;/li&gt;&#xD;
     &lt;li&gt;GS/HS/DS to GLSL&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;在参考了&lt;a href="http://cgit.freedesktop.org/mesa/mesa/commit/?id=92617aeac109481258f0c3863d09c1b8903d438b" target="_blank"&gt;mesa的d3d1x for linux&lt;/a&gt;之后，目前已经实现了第一步，反汇编器。下面一段VS：&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;div text=""  default"="" style="overflow:auto;white-space:nowrap;width:435px;height:300px;"&gt;&#xD;
&lt;table cellpadding="0" cellspacing="0"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;div&gt;1&lt;br /&gt;&#xD;
             2&lt;br /&gt;&#xD;
             3&lt;br /&gt;&#xD;
             4&lt;br /&gt;&#xD;
             5&lt;br /&gt;&#xD;
             6&lt;br /&gt;&#xD;
             7&lt;br /&gt;&#xD;
             8&lt;br /&gt;&#xD;
             9&lt;br /&gt;&#xD;
             10&lt;br /&gt;&#xD;
             11&lt;br /&gt;&#xD;
             12&lt;br /&gt;&#xD;
             13&lt;br /&gt;&#xD;
             14&lt;br /&gt;&#xD;
             15&lt;br /&gt;&#xD;
             16&lt;br /&gt;&#xD;
             17&lt;br /&gt;&#xD;
             18&lt;br /&gt;&#xD;
             19&lt;br /&gt;&#xD;
             20&lt;br /&gt;&#xD;
             21&lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;div codecolorer"=""&gt;void DeferredRenderingVS(float4 pos : POSITION,&lt;br /&gt;&#xD;
             #ifdef NOPERSPECTIVE_SUPPORT&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out noperspective float2 oTc : TEXCOORD0,&lt;br /&gt;&#xD;
             #else&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out float3 oTc : TEXCOORD0,&lt;br /&gt;&#xD;
             #endif&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out float3 oViewDir : TEXCOORD1,&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; out float4 oPos : SV_Position)&lt;br /&gt;&#xD;
             {&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oPos = mul(pos, light_volume_mvp);&lt;br /&gt;&#xD;
             &lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oViewDir = mul(pos, light_volume_mv).xyz;&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oTc.xy = oPos.xy / oPos.w * 0.5f;&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oTc.y *= KLAYGE_FLIPPING;&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oTc.xy += 0.5f;&lt;br /&gt;&#xD;
             &lt;br /&gt;&#xD;
             #ifndef NOPERSPECTIVE_SUPPORT&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oTc.z = oPos.w;&lt;br /&gt;&#xD;
             &amp;nbsp; &amp;nbsp; oTc.xy *= oTc.z;&lt;br /&gt;&#xD;
             #endif&lt;br /&gt;&#xD;
             }&lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
     &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;经过fxc编译成vs_5_0后，可以用我的disasm反汇编出&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;div text=""  default"="" style="overflow:auto;white-space:nowrap;width:435px;"&gt;&#xD;
&lt;table cellpadding="0" cellspacing="0"&gt;&#xD;
     &lt;tbody&gt;&#xD;
         &lt;tr&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;div&gt;1&lt;br /&gt;&#xD;
             2&lt;br /&gt;&#xD;
             3&lt;br /&gt;&#xD;
             4&lt;br /&gt;&#xD;
             5&lt;br /&gt;&#xD;
             6&lt;br /&gt;&#xD;
             7&lt;br /&gt;&#xD;
             8&lt;br /&gt;&#xD;
             9&lt;br /&gt;&#xD;
             10&lt;br /&gt;&#xD;
             11&lt;br /&gt;&#xD;
             12&lt;br /&gt;&#xD;
             13&lt;br /&gt;&#xD;
             14&lt;br /&gt;&#xD;
             15&lt;br /&gt;&#xD;
             16&lt;br /&gt;&#xD;
             17&lt;br /&gt;&#xD;
             18&lt;br /&gt;&#xD;
             19&lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
             &lt;td&gt;&#xD;
             &lt;div codecolorer"=""&gt;vs_5_0&lt;br /&gt;&#xD;
             dcl_global_flags refactoringAllowed&lt;br /&gt;&#xD;
             dcl_constant_buffer cb0[12].xyzw, immediateIndexed&lt;br /&gt;&#xD;
             dcl_input v0.xyzw&lt;br /&gt;&#xD;
             dcl_output o0.xy&lt;br /&gt;&#xD;
             dcl_output o1.xyz&lt;br /&gt;&#xD;
             dcl_output_siv o2.xyzw, position&lt;br /&gt;&#xD;
             dcl_temps 2&lt;br /&gt;&#xD;
             dp4 r0.x, v0.xyzw, cb0[8].xyzw&lt;br /&gt;&#xD;
             dp4 r0.y, v0.xyzw, cb0[9].xyzw&lt;br /&gt;&#xD;
             dp4 r0.w, v0.xyzw, cb0[11].xyzw&lt;br /&gt;&#xD;
             div r1.xy, r0.xyxx, r0.wwww&lt;br /&gt;&#xD;
             mov o2.xyw, r0.xyxw&lt;br /&gt;&#xD;
             mad o0.xy, r1.xyxx, l(0.5, -0.5, 0, 0), l(0.5, 0.5, 0, 0)&lt;br /&gt;&#xD;
             dp4 o1.x, v0.xyzw, cb0[4].xyzw&lt;br /&gt;&#xD;
             dp4 o1.y, v0.xyzw, cb0[5].xyzw&lt;br /&gt;&#xD;
             dp4 o1.z, v0.xyzw, cb0[6].xyzw&lt;br /&gt;&#xD;
             dp4 o2.z, v0.xyzw, cb0[10].xyzw&lt;br /&gt;&#xD;
             ret&lt;/div&gt;&#xD;
             &lt;/td&gt;&#xD;
         &lt;/tr&gt;&#xD;
     &lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/pre&gt;&#xD;
&lt;p&gt;与fxc的反汇编结果完全一致。ps_5_0的测试也可以通过。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;HLSL bytecode to GLSL编译器的第一步算是迈出了，接下去我会开始尝试一些GLSL VS/PS的生成工作。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2343798.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2012/02/09/2343798.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2012/02/06/2340528.html</id><title type="text">正式宣布次时代评测软件KlayMark</title><summary type="text">转载请注明出处为KlayGE游戏引擎，本文地址为http://www.klayge.org/2012/02/06/the-next-gen-benchmark-software-klaymark-announced/ 经过长时间的筹划，今天正式宣布开始次世代评测软件KlayMark的开发。简介KlayMark将以KlayGE为引擎，定位为一款集各种先进渲染技术于一身的跨平台评测软件。在提供赏心悦目的画面同时，对系统的性能作出综合评价。不论是PC平台还是移动平台，KlayMark将提供统一的计分方式，使得不同平台之间的得分具有可比性。虽然动用到许多新技术，但KlayMark仍会保持极高的效率、较</summary><published>2012-02-06T11:18:00Z</published><updated>2012-02-06T11:18:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2012/02/06/2340528.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2012/02/06/2340528.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span dir="ltr"&gt;转载请注明出处为&lt;a href="http://www.klayge.org/2012/02/06/the-next-gen-benchmark-software-klaymark-announced/%home_url%"&gt;KlayGE游戏引擎&lt;/a&gt;，本文地址为&lt;a href="http://www.klayge.org/2012/02/06/the-next-gen-benchmark-software-klaymark-announced/"&gt;http://www.klayge.org/2012/02/06/the-next-gen-benchmark-software-klaymark-announced/&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;经过长时间的筹划，今天正式宣布开始次世代评测软件&lt;strong&gt;KlayMark&lt;/strong&gt;的开发。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;简介&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KlayMark将以&lt;a href="http://www.klayge.org/"&gt;KlayGE&lt;/a&gt;为引擎，定位为一款集各种先进渲染技术于一身的跨平台评测软件。在提供赏心悦目的画面同时，对系统的性能作出综合评价。不论是PC平台还是移动平台，KlayMark将提供统一的计分方式，使得不同平台之间的得分具有可比性。&lt;/p&gt;&#xD;
&lt;p&gt;虽然动用到许多新技术，但KlayMark仍会保持极高的效率、较低的配置、良好的跨平台能力等特点。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;发布计划&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KlayMark的源代码将迟于二进制版本发布，类似Doom和Quake的方法。&lt;/p&gt;&#xD;
&lt;p&gt;由于平台的差异，KlayMark 1.0的发布将分拨进行。&lt;/p&gt;&#xD;
&lt;p&gt;Wave 1：预计开发周期1年。Windows平台支持D3D10+和OpenGL，Android平台支持Tegra 2+的平板。&lt;/p&gt;&#xD;
&lt;p&gt;Wave 2：Android平台支持PowerVR 5+、Mali-4+的平板和手机，支持iOS平台。&lt;/p&gt;&#xD;
&lt;p&gt;Wave 3：支持MacOSX和Linux。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2340528.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2012/02/06/2340528.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/25/2301015.html</id><title type="text">KlayGE正式启用双协议</title><summary type="text">转载请注明出处为KlayGE游戏引擎从KlayGE 4.0开始，KlayGE转为使用双协议。默认的协议仍然是开放源代码的GPL。对于不适合用GPL的用户，在缴纳授权费的情况下，可以选择另一个协议，称为KlayGE Proprietary License（KPL）。因此对于需要避开GPL条款的用户，也有机会为项目购买另一个协议的KlayGE。详细情况请见Licensing。</summary><published>2011-12-25T07:00:00Z</published><updated>2011-12-25T07:00:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2301015.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2301015.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span dir="ltr"&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从&lt;a title="最先进的开源游戏引擎KlayGE 4.0.0发布" href="http://www.klayge.org/2011/12/25/the-most-advanced-open-source-game-engine-klayge-4-0-0-released/"&gt;KlayGE 4.0&lt;/a&gt;开始，KlayGE转为使用双协议。默认的协议仍然是开放源代码的GPL。对于不适合用GPL的用户，在缴纳授权费的情况下，可以选择另一个协议，称为&lt;strong&gt;KlayGE Proprietary License&lt;/strong&gt;（KPL）。因此对于需要避开GPL条款的用户，也有机会为项目购买另一个协议的KlayGE。&lt;/p&gt;&#xD;
&lt;p&gt;详细情况请见&lt;a href="http://www.klayge.org/2011/12/licensing/"&gt;Licensing&lt;/a&gt;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2301015.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2301015.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300979.html</id><title type="text">最先进的开源游戏引擎KlayGE 4.0.0发布</title><summary type="text">转载请注明出处为KlayGE游戏引擎 经过KlayGE团队半年的努力，KlayGE 4.0.0正式发布了！作为一个大版本，KlayGE开始由一堆发散的功能集走向一个以Deferred Rendeirng为核心的系统。并且开始支持新平台Android。主要更新如下： Deferred Rendering layer集成到核心中 全局光照得到了很大的加速 支持Android（在王锐的协助下完成） 支持实时焦散（由Parsifal Wang完成） 蒙皮动画支持Dual quaternion（由Honyeung Lau、Xiaoyang Zhu完成） 增...</summary><published>2011-12-25T06:04:00Z</published><updated>2011-12-25T06:04:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300979.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300979.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span dir="ltr"&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;span dir="ltr"&gt;&lt;a href="http://www.klayge.org/2011/12/25/the-most-advanced-open-source-game-engine-klayge-4-0-0-released/"&gt;&lt;/a&gt;&lt;/span&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;经过KlayGE团队半年的努力，KlayGE 4.0.0正式发布了！作为一个大版本，KlayGE开始由一堆发散的功能集走向一个以Deferred Rendeirng为核心的系统。并且开始支持新平台Android。主要更新如下：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;Deferred Rendering layer集成到核心中&lt;/strong&gt;&lt;/li&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;全局光照得到了很大的加速&lt;/strong&gt;&lt;/li&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;支持Android（在王锐的协助下完成）&lt;/strong&gt;&lt;/li&gt;&#xD;
     &lt;li&gt;支持实时焦散（由Parsifal Wang完成）&lt;/li&gt;&#xD;
     &lt;li&gt;蒙皮动画支持Dual quaternion（由Honyeung Lau、Xiaoyang Zhu完成）&lt;/li&gt;&#xD;
     &lt;li&gt;增加了资源载入框架（由郭鹏设计）&lt;/li&gt;&#xD;
     &lt;li&gt;改进的SSVO（由吴野完成）&lt;/li&gt;&#xD;
     &lt;li&gt;骨骼数据压缩&lt;/li&gt;&#xD;
     &lt;li&gt;用Phong Tessellation代替PN-Triangles&lt;/li&gt;&#xD;
     &lt;li&gt;支持渲染到纹理数组&lt;/li&gt;&#xD;
     &lt;li&gt;支持parallax occlusion mapping&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;从&lt;a href="http://www.klayge.org/downloads/"&gt;此处&lt;/a&gt;下载KlayGE 4.0.0。&lt;/p&gt;&#xD;
&lt;p&gt;与此同时，从4.0开始，KlayGE转为使用双协议：开放源代码的GPL和封闭的KlayGE Proprietary License（KPL）。详细情况请见&lt;a href="http://www.klayge.org/licensing/"&gt;Licensing&lt;/a&gt;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2300979.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300979.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300978.html</id><title type="text">Text和VertexDisplacement能在Android上运行了</title><summary type="text">转载请注明出处为KlayGE游戏引擎在KlayGE的空框架跑起来之后，经过几天艰苦的debug，修正了多个KlayGE的bug，绕开更多Android的bug。现在，Text和Vertex displacement两个例子已经能在Android上顺利执行了。Text例子。乱码不是bug，只因为系统区域没设置成中文。Vertex displacement例子。在移植的过程中，遇到的一个麻烦是NDK的ANativeWindow_getWidth和ANativeWindow_getHeight总是返 回1，无法得到正确的窗口大小。结果viewport被错误地设置成1&amp;#215;1，使得渲出的东西都只</summary><published>2011-12-25T06:03:00Z</published><updated>2011-12-25T06:03:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300978.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300978.html"/><content type="html">&lt;p&gt;&lt;span dir="ltr"&gt;&lt;strong&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在&lt;a title="KlayGE走上Android" href="http://www.klayge.org/2011/12/18/klayge-goes-to-android/"&gt;KlayGE的空框架跑起来&lt;/a&gt;之后，经过几天艰苦的debug，修正了多个KlayGE的bug，绕开更多Android的bug。现在，Text和Vertex displacement两个例子已经能在Android上顺利执行了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_text_on_android_x86.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div align="center"&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_text_on_android_x86.jpg"&gt;&lt;img size-full=""  wp-image-1756"="" title="klayge_text_on_android_x86" src="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_text_on_android_x86.jpg" alt="KlayGE Text on Android x86" width="600" height="450" /&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
Text例子。乱码不是bug，只因为系统区域没设置成中文。&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_vertexdisplacement_on_android_x86.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div align="center"&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_vertexdisplacement_on_android_x86.jpg"&gt;&lt;img size-full=""  wp-image-1757"="" title="klayge_vertexdisplacement_on_android_x86" src="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_vertexdisplacement_on_android_x86.jpg" alt="KlayGE Vertex Displacement on Android x86" width="600" height="450" /&gt;&lt;/a&gt;&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;Vertex displacement例子。&lt;/p&gt;&#xD;
&lt;p&gt;在移植的过程中，遇到的一个麻烦是NDK的ANativeWindow_getWidth和ANativeWindow_getHeight总是返 回1，无法得到正确的窗口大小。结果viewport被错误地设置成1&amp;#215;1，使得渲出的东西都只有1个pixel。在修改了 native_app_glue，获取resize的消息后，viewport大小终于得到了正确的设置。那两个例子才因此能正常执行。从这里也可以看 出，Android的NDK千疮百孔，开发的时候要异常小心。&lt;/p&gt;&#xD;
&lt;p&gt;另一个事情是，Android x86在EeePC 701的i915上是用Mesa软件执行OpenGL ES 2的（至少，我还没找到让它不fallback的方法），所以帧速率非常低。&lt;/p&gt;&#xD;
&lt;p&gt;至此，KlayGE for Android的第一阶段已经完成，即引擎核心已经完成移植。下个阶段会让更多的例子能在Android上执行。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2300978.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/25/2300978.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291795.html</id><title type="text">glloader 4.0.0正式发布，支持Android</title><summary type="text">转载请注明出处为KlayGE游戏引擎glloader，KlayGE游戏引擎的 一个子项目，是一个OpenGL扩展载入库。它可以载入OpenGL 1.0-4.2，OpenGL ES 1.0-2.0，同时也支持WGL、GLX、EGL和其他GL/GLES扩展，只要编写xml脚本就能自动生成扩展载入代码。glloader有一个 XML格式的数据库，包含了GL/GLES的所有入口函数、标示和类型定义。在这个新版本中，glloader有了Android版，同时GL/GLES/EGL registry里的所有最新的扩展也都支持了。请从这里下载。</summary><published>2011-12-18T07:24:00Z</published><updated>2011-12-18T07:24:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291795.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291795.html"/><content type="html">&lt;p&gt;&lt;strong&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;glloader&lt;/strong&gt;，&lt;a title="KlayGE" href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;的 一个子项目，是一个OpenGL扩展载入库。它可以载入OpenGL 1.0-4.2，OpenGL ES 1.0-2.0，同时也支持WGL、GLX、EGL和其他GL/GLES扩展，只要编写xml脚本就能自动生成扩展载入代码。glloader有一个 XML格式的数据库，包含了GL/GLES的所有入口函数、标示和类型定义。&lt;/p&gt;&#xD;
&lt;p&gt;在这个新版本中，glloader有了Android版，同时GL/GLES/EGL registry里的所有最新的扩展也都支持了。&lt;/p&gt;&#xD;
&lt;p&gt;请从&lt;a href="http://www.klayge.org/downloads/"&gt;这里&lt;/a&gt;下载。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2291795.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291795.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291792.html</id><title type="text">KlayGE新增一个hg repository</title><summary type="text">转载请注明出处为KlayGE游戏引擎由于sourceforge和bitbucket在国内的访问速度较慢，我在codeplex上申请了个空间http://klayge.codeplex.com/用于存放KlayGE的repository。Mercurial clone的地址是https://hg01.codeplex.com/klayge。如果你不满现在的访问速度，可以考虑用这个新的。</summary><published>2011-12-18T07:23:00Z</published><updated>2011-12-18T07:23:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291792.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291792.html"/><content type="html">&lt;p&gt;&lt;strong&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;由于sourceforge和bitbucket在国内的访问速度较慢，我在&lt;a href="http://www.codeplex.com/" target="_blank"&gt;codeplex&lt;/a&gt;上申请了个空间&lt;a href="http://klayge.codeplex.com/" target="_blank"&gt;http://klayge.codeplex.com/&lt;/a&gt;用于存放KlayGE的repository。Mercurial clone的地址是&lt;strong&gt;https://hg01.codeplex.com/klayge&lt;/strong&gt;。如果你不满现在的访问速度，可以考虑用这个新的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2291792.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291792.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291790.html</id><title type="text">KlayGE走上Android</title><summary type="text">转载请注明出处为KlayGE游戏引擎继glloader移植到Android之后，KlayGE也可以在Android上执行了。虽然，严格来说，只是能跑最最基本的空框架。由于我没有Android真机，模拟器又无法执行OpenGL ES 2，所以我的测试方法是在最老的Asus EeePC上执行Android x86。空框架EmptyApp目前可以顺利执行：是的，只有Clear，没有文件读取、没有字体渲染。但作为第一步，这是必不可少的。</summary><published>2011-12-18T07:19:00Z</published><updated>2011-12-18T07:19:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291790.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291790.html"/><content type="html">&lt;strong&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/strong&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;a href="http://www.klayge.org/2011/12/18/klayge%e8%b5%b0%e4%b8%8aandroid/"&gt;&lt;/a&gt;&#xD;
&lt;p&gt;继&lt;a title="glloader移植到了Android" href="http://www.klayge.org/2011/12/07/glloader%e7%a7%bb%e6%a4%8d%e5%88%b0%e4%ba%86android/"&gt;glloader移植到Android&lt;/a&gt;之后，KlayGE也可以在Android上执行了。虽然，严格来说，只是能跑最最基本的空框架。&lt;/p&gt;&#xD;
&lt;p&gt;由于我没有Android真机，模拟器又无法执行OpenGL ES 2，所以我的测试方法是在最老的Asus EeePC上执行&lt;a href="http://www.android-x86.org/" target="_blank"&gt;Android x86&lt;/a&gt;。空框架EmptyApp目前可以顺利执行：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_on_android_x86.jpg"&gt;&lt;img size-full=""  wp-image-1716"="" title="klayge_on_android_x86" src="http://www.klayge.org/wp/wp-content/uploads/2011/12/klayge_on_android_x86.jpg" alt="KlayGE on Android x86" height="450" width="600" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;是的，只有Clear，没有文件读取、没有字体渲染。但作为第一步，这是必不可少的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2291790.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/18/2291790.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/08/2280507.html</id><title type="text">glloader移植到了Android</title><summary type="text">转载请注明出处为KlayGE游戏引擎glloader，作为KlayGE的一个子项目，是OpenGL扩展载入库，可以载入OpenGL 1.0-4.2，OpenGL ES 1.0-2.0，以及WGL、GLX等OpenGL扩展。只要编写xml脚本就能自动生成扩展载入代码。在王锐的帮助下，glloader完成了移植到Android的工作。目前glloader可以用NDK r6和r7进行编译，在模拟器和真机Xoom上均测试通过。目前，支持Android的glloader代码可以在hg上找到。正式版本glloader 4.0将会在晚些时候发布。这里有一个在Android NDK中使用glloader的例子</summary><published>2011-12-08T03:52:00Z</published><updated>2011-12-08T03:52:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/08/2280507.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/08/2280507.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span dir="ltr"&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;glloader，作为KlayGE的一个子项目，是OpenGL扩展载入库，可以载入OpenGL 1.0-4.2，OpenGL ES 1.0-2.0，以及WGL、GLX等OpenGL扩展。只要编写xml脚本就能自动生成扩展载入代码。&lt;/p&gt;&#xD;
&lt;p&gt;在王锐的帮助下，glloader完成了移植到Android的工作。目前glloader可以用NDK r6和r7进行编译，在模拟器和真机Xoom上均测试通过。目前，支持Android的glloader代码可以在&lt;a href="http://www.klayge.org/developers/mercurial/"&gt;hg&lt;/a&gt;上找到。正式版本glloader 4.0将会在晚些时候发布。&lt;/p&gt;&#xD;
&lt;p&gt;这里有一个在Android NDK中使用glloader的例子，从NDK自带的native-activity修改而来。从这里可以看出，从原先的直接调用GLES改为使用glloader之需要修改#include和link选项。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/native-activity.7z"&gt;native-activity.7z&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;需要注意的是，由于NDK r6的一个&lt;a href="http://code.google.com/p/android/issues/detail?id=16627" target="_blank"&gt;bug&lt;/a&gt;，所以使用到glloader的shared library都得是C++写的，不能是C，否则会因为连接不到stdc++ runtime而出现连接错误。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2280507.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/08/2280507.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/gongminmin/archive/2011/12/02/2271827.html</id><title type="text">KlayGE 4.0中Deferred Rendering的改进（五）完结篇：Post process</title><summary type="text">转载请注明出处为KlayGE游戏引擎上一篇分析了KlayGE中实现实时全动态GI的方法，本篇是这个系列的完结篇，主要讲流水线的最后一段：Post process。Post process在KlayGE 4.0的Deferred Rendering中，post process主要有HDR、AA和color grading。下面将分别讲述它们的改进。HDR在KlayGE 3.12用了filmic tonemapping之后，HDR部分就几乎没有别的改变。这里唯一的变化是最终输出的float4，把亮度存在A通道上。这是为了后面FXAA的需要。AA在Deferred框架中，无法使用硬件AA曾经是个恼人</summary><published>2011-12-02T03:22:00Z</published><updated>2011-12-02T03:22:00Z</updated><author><name>龚敏敏</name><uri>http://www.cnblogs.com/gongminmin/</uri></author><link rel="alternate" href="http://www.cnblogs.com/gongminmin/archive/2011/12/02/2271827.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/gongminmin/archive/2011/12/02/2271827.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span dir="ltr"&gt;转载请注明出处为&lt;a href="http://www.klayge.org/"&gt;KlayGE游戏引擎&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="KlayGE 4.0中Deferred Rendering的改进（四）：GI的神话" href="http://www.klayge.org/2011/11/30/klayge-4-0%e4%b8%addeferred-rendering%e7%9a%84%e6%94%b9%e8%bf%9b%ef%bc%88%e5%9b%9b%ef%bc%89%ef%bc%9agi%e7%9a%84%e7%a5%9e%e8%af%9d/"&gt;上一篇&lt;/a&gt;分析了KlayGE中实现实时全动态GI的方法，本篇是这个系列的完结篇，主要讲流水线的最后一段：Post process。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Post process&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在KlayGE 4.0的Deferred Rendering中，post process主要有HDR、AA和color grading。下面将分别讲述它们的改进。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;HDR&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在KlayGE 3.12用了&lt;a title="Filmic Tonemapping rocks" href="http://www.klayge.org/2011/05/11/filmic-tonemapping-rocks/"&gt;filmic tonemapping&lt;/a&gt;之后，HDR部分就几乎没有别的改变。这里唯一的变化是最终输出的float4，把亮度存在A通道上。这是为了后面FXAA的需要。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;AA&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在Deferred框架中，无法使用硬件AA曾经是个恼人的问题。随着这些年&lt;a title="Anti-alias的前世今生（二）：Post process based AA" href="http://www.klayge.org/2011/05/17/anti-alias%e7%9a%84%e5%89%8d%e4%b8%96%e4%bb%8a%e7%94%9f%ef%bc%88%e4%ba%8c%ef%bc%89%ef%bc%9apost-process-based-aa/"&gt;各种基于post process的AA方法&lt;/a&gt;大量出现，Deferred下AA的问题基本被解决了。&lt;/p&gt;&#xD;
&lt;p&gt;团队成员陈顺斌和郭鹏曾为KlayGE 3.12提供了&lt;a title="KlayGE中的FXAA已经完成" href="http://www.klayge.org/2011/06/22/klayge%e4%b8%ad%e7%9a%84fxaa%e5%b7%b2%e7%bb%8f%e5%ae%8c%e6%88%90/"&gt;FXAA&lt;/a&gt;。 在新版本中，FXAA也升级到了最新的3.11版。从FXAA 3开始，就要求输入纹理是LDR的RGBL格式（L为亮度），所以计算AA的地点也就从HDR之前改到了HDR之后。虽然FXAA 3.11可以用G通道代替L，但效果肯定会受影响。既然让HDR post process输出RGBL轻而易举，我就没有把L改成G。FXAA极快，目前的实现在GTX480上可以达到0.1ms的惊人速度。几乎做到了无性能损 失的高质量AA。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Color grading&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Color grading是这个版本新增的。以前游戏一般不太重视color grading的作用，但在电影业，color grading是流水线非常重要的一步（可以和skinning相提并论的）。这里我实现的color grading是用16x16x16的3D texture作为查找表，用原RGB作为地址去查询，查询出的结果即为调色后的颜色（来自&lt;a href="http://developer.nvidia.com/node/43" target="_blank"&gt;GPU Gems 2: Chapter 24. Using Lookup Tables to Accelerate Color Transformations&lt;/a&gt;）。除了runtime的post process之外，还需要一个离线工具，用来生成那个3D texture。这里我用的方法类似CE3，先生成一个摊平的256&amp;#215;16的2D texture：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/color_grading_flatten.png"&gt;&#xD;
&lt;/a&gt;&lt;/p&gt;&lt;div align="center"&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/color_grading_flatten.png"&gt;&lt;img size-full=""  wp-image-1666"="" title="Color grading flatten" src="http://www.klayge.org/wp/wp-content/uploads/2011/12/color_grading_flatten.png" alt="Color grading flatten" width="256" height="16" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.klayge.org/wp/wp-content/uploads/2011/12/color_grading_flatten.png"&gt;&#xD;
&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在photoshop里打开一张游戏截图，调整RGB曲线至需要的色调，然后把那个RGB曲线应用到之前生成的2D texture，最终打包成3D texture就得到了我们所需要的查找表。以后可能会根据需要做一个在线调整color grading的工具。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本系列文章把KlayGE 4.0中Deferred Rendering的改进逐一介绍了一下，希望能对也在做类似事情的朋友有所帮助。在总结里我也身边展望一下未来，看看在KlayGE 4.1中，Deferred Rendering部分还会可能出现什么改进。&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;更高的速度。&lt;/strong&gt;Multiresolution的方法在GI中获得了成功，也许也可以扩展到direct lighting和SSVO中，用于加速整个Deferred Rendering。&lt;/li&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;改进HDR中的bloom filter。&lt;/strong&gt;学习3DMark11，用FFT的方式在一个pass内完成bloom、lens flare等特效。&lt;/li&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;支持移动平台。&lt;/strong&gt;精简的Deferred Rendering流水线将会以至到移动平台上。&lt;/li&gt;&#xD;
     &lt;li&gt;&lt;strong&gt;更多例子用Deferred Rendering实现。&lt;/strong&gt;目前只有3个例子用到了deferred框架，其他还是forward的。以后会有越来越多的例子转到deferred中。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;对于KlayGE 4.x还有什么期待，可以上&lt;a href="http://www.klayge.org/trac" target="_blank"&gt;trac&lt;/a&gt;交流。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/gongminmin/aggbug/2271827.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/gongminmin/archive/2011/12/02/2271827.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
