Skip to content

Archive

Archive for December, 2012
经过多名成员几个月的努力,KlayGE 4.2在上周顺利发布!和上一个版本相同,在KlayGE 4.2的开发过程中,已经把一些ticket规划入KlayGE 4.3,并在十二月中旬已经提前进入了开发阶段。 时间线 这里列出几个重要的时间点,以供进度参考。 2013年5月31日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。 2013年6月15日,code complete:完成所有代码,除非特殊情况,否则不能在改变接口。 2013年6月30日,release:正式发布KlayGE 4.3。 必然出现 这些特性一定会出现在KlayGE 4.3中。其中有些需求来自于KlayMark。 Script plugin LEAN mapping Build by official Android NDK Improved deferred rend ...
时间过得真快,离上一次讨论编译期字符串Hash已经差不多2年了。上次的尝试失败了,只能产生优化期常量,没有做到编译期常量的效果。现在有了C++11,情况会不会有所改变呢? constexpr 上次的帖子中,在回复mtlung的时候,我提到了C++0x的constexpr可能会成为救星。现在C++11的标准出来了,GCC 4.6+和Clang 3.1+也开始支持constexpr了。首先尝试宏的做法,代码和上次几乎相同: constexpr inline size_t HASH_FUNCTION(size_t seed, char ch) { return seed ^ (ch + 0x9e3779b9 + (seed << 6) + (seed >> 2)); } #define HASH_RECURSE_00(seed, str) (*(str + 1) == 0 ? HASH_FUNCTION((seed), *(str)) : HASH_RECUR ...
[zh] 经过KlayGE团队的努力,今天KlayGE 4.2正式发布了!这个版本不但提升了速度,提高了效果,还增强了工具链。KlayGE 4.2的主要更新如下: 一个新的子项目MeshML library 实验性支持WinRT平台 体积光(由王清源完成) 改进的DoF,并支持Bokeh 贴花渲染 JudaTex打包工具(由Honyeung Lau完成) 工具集增强 摄像机路径功能(王毅和胡勤协助完成) 多视口支持 优化的顶点结构 全方向SSR 更好地支持compute shader 改进的Juda texture GPU排序 KlayGE 4.2仍然使用双协议:开放源代码的GPL和封闭的KlayGE Proprietary License(KPL)。详细情况请见Licensing。 从此处下载KlayGE 4.2。祝大家新年快乐! ...
Surface的GPU是Tegra3,但它对应的D3D能力,在网上却很难查到。昨天我自己在Surface上执行了一下Windows Kits 8带的ARM版dxcapsviewer,dump出了这个文件。我已经去掉了Microsoft Basic Renderer Driver和WARP这两个和PC上相同的部分,就剩下Tegra3本身的。 从这个列表可以看出,Surface只能支持D3D_FEATURE_LEVEL_9_1。估计是因为Tegra3不支持完整的occlusion query,以及最大纹理只支持到了2048,必须放弃9_2和9_3。很可惜的是MRT的功能也因此被禁用了。
上次对各编译器对C++11的支持比较之后,很多观众提议加入Intel C++ Compiler(ICC)和Clang。这次修订还加入了在VC11 Nov 12 CTP中对C++11的提升。上回表中的Yes/No标识也被我改成了写明支持一个feature的最低版本号,feature的顺序也调整了一下。为了方便查询,还加入了Proposal的链接。 C++11 Core Language Features Language Feature Proposal MSVC GCC ICC Clang 替代方案 Rvalue references N2118 10.0 4.3 12.0 2.9 Boost.Move     Rvalue references for *this N2439 No No No 2.9 Initialization of class objects by rvalues N1610 9.0 4.3 11.1 2.9 Non-static data membe ...
昨晚在升级了Intel和NV的显卡驱动之后,突然发现原先在程序中启用Optimus的NvOptimusEnablement失效了。及时回滚到老的驱动,仍无法解决问题。试了多种方法之后,最终发现在NV Control Panel的Manage 3D Settings里面点一下Restore,即便在UI上看不出什么,但NvOptimusEnablement恢复了作用!之前尝试失败的朋友不妨也用这个方法试试看。
昨天比较完各编译器对C++11的支持,决定一蹴而就,继续引入几个不影响接口的C++11语言核心特性。于是选了type traits、static assert、range-based for和decltype。前三个都好办,用个宏包起来,在不支持C++11的编译器上切换回Boost的实现。只有decltype是需要特别注意的。 BOOST_TYPEOF也能实现类似decltype的功能,比如有一个vector<int> v,typedef BOOST_TYPEOF(v) VType;,那么VType就是vector<int>了。但如果v是vector<int>&,BOOST_TYPEOF(v)得到的是vector<int>,而decltype(v)得到的是vector<int>&。如果要接着把VType用作别的用途,比如通过VType::reference得到int&,这两者就会有 ...
在KlayGE首次引入C++11特性之后,我顺便调研了一下个主流编译器对C++11的支持度,以便在下个版本中加入更多的C++11元素。这里还列出了在不支持的时候,可以采用的替代方案。主要参考了C++11 Features in Visual C++ 11,Status of Experimental C++0x Support in GCC 4.6,Status of Experimental C++0x Support in GCC 4.7,Boost。 C++11 Core Language Features   VC 10 VC 11 GCC 4.6 GCC 4.7 替代方案 Rvalue references Yes Yes Yes Yes Boost.Move Rvalue references for *this No No No No Non-static data member initializers No No No Yes Variadic templates No No Yes Y ...
在即将发布的KlayGE 4.2里,工具链得到了扩充。新增的几个小工具涵盖了一般内容创建工具不提供,但游戏开发中常常需要用到的功能。这些工具包括: Bump2Normal:把早期表示纹理坐标扰动的bump map转成尽量接近的normal map。 Mipmapper:对任意纹理建立mipmap。 PlatformDeployer:把纹理和模型对不同平台转成不同格式。 Tex2JTML:把多张纹理拼到一个Juda texture中,由Honyeung Lau提供。 TexCompressor:BC1-5纹理压缩器。 加上原有的几个相关的工具: ForceTexSRGB:强制转换成sRGB格式。 HDRCompressor:压缩HDR纹理。 Normal2Height:normal map转成height map。 NormalMapCompressor:normal map专用压缩器 ...
KlayGE 4.1支持由王清源提供的屏幕空间反射,但由于只是屏幕空间,反射方向就被局限到跟视线相同的方向。在即将发布的KlayGE 4.2中,这个功能被扩展到了支持多个方向,成为了实时的全方向非平面反射。(虽然7月底就已经实现了这个功能,但到现在才有时间整理出demo...) 多方向反射必然需要往不同方向渲染多次场景,而且每一次都必须是带lighting和shading的效果。因此,Deferred rendering layer引入了multi-viewport的功能,只要定义几个不同的viewport,就能同时得到不同视点的场景渲染结果,包括当前帧的RGB/depth,和上一帧的RGB/depth。这个功能不但能用在反射,还能用于分屏显示、多视角显示、缩略图等游戏常见的情景。这样相当于 ...