在2010年,曾经有个d3d1x for linux的项目短暂地轰动过。它通过Gallium的state tracker,原生地支持了d3d10和11的API,能运行一些简单的demo。遗憾的是,由于Wine的人对d3d1x不是很感兴趣(d3d9还支持不过来呢),在2013年3月份,d3d1x for linux因为无法使用和无人维护,被从mesa的repository里删除了。
(题外话:尚在开发中的HLSL bytecode to GLSL编译器也用了d3d1x for linux的bytecode解析代码,里面bug不少,而且都是下标写错之类不执行到肉眼很难看出来的bug。)
与此同时,d3d9 for linux诞生了。和之前一样,它也是个state tracker,也是原生支持。更好的是,它已经可以执行d3d9的游戏,并且性能高于Wine的转换成OpenGL的方 ...
KlayGE 4.3.0的输入插件新增了对触摸输入的支持。但这部分代码在WinXP上执行的时候,说user32.dll缺少GetTouchInputInfo的入口。这里出个补丁,通过动态检测和载入可以有效的解决这个问题。同时感谢黄河水报告了这个bug。分别解压后覆盖掉源文件即可。
KlayGE源代码的补丁:KlayGE_4_3_0_patch.7z
Sample的补丁:KlayGE_Samples_4_3_0_patch.z7
KlayGE 4.4的开发刚刚开始。在目前的开发版本里,编译脚本有了较大的改进,速度提升、内存消耗降低。这里就先总结一下一些经验。
MSBuild
KlayGE的编译脚本原先是通过调用devenv,也就是Visual Studio的IDE来编译工程的。用户的普遍反映是编译信息不断滚动,很难看清是否有错误。前不久在编译Salvia的时候,看到空明大大的脚本输出通过不同颜色区分warning和error。问了一下才知道他调用的是MSBuild,本身就带颜色高亮。
MSBuild从VS2008开始就集成到Visual Studio了,在VS2010的时候已经全面接管了C++工程的编译。所以,如果调用devenv来编译一个工程,那么它的流程是:
启动VS IDE
启动MSBuild,调用cl和linker等
关闭VS IDE
...
经过团队成员半年来的努力,KlayGE 4.3在上周顺利发布。最近几个版本的习惯都是,在一个版本开发过程中就已经把一些ticket规划入下一个版本,并在发布之前提前进入了下一个版本的开发阶段。这里公开一下对KlayGE 4.4的一些规划。
时间线
这里列出几个重要的时间点,以供进度参考。
2013年11月30日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。
2013年12月15日,code complete:完成所有代码,除非特殊情况,否则不能在改变接口。
2013年12月31日,release:正式发布KlayGE 4.4。
必然出现
这些特性一定会出现在KlayGE 4.4中。其中有些需求来自于KlayMark。
High quality terrain:高质量的无限大地 ...
昨天微软发布了Windows 8.1 Preview,其中一个没怎么被发现的新功能是,DirectX 11.2!上一次DirectX出现.2的版本号还是在8.x时代吧。DirectX 11.2引入了以下新功能:
HLSL shader linking:Shader可以分成小块,分开编译,连接后成为完整的shader。给模块替换提供了方便。甚至,在11.2中还提供了一个叫Function linking graph的功能,可以像offline shader那样,构建一个graph,每个节点是一小段shader。最后才link了送给GPU。
Inbox HLSL compiler:Win8的时候,shader编译器是个独立的dll,在metro里面不允许调用,得离线编译。现在编译器又回来了,D3DCompile都可以在metro和desktop里使用。
GPU overlay support:直接支持在3D ...
[zh]
经过KlayGE团队半年来的努力,今天KlayGE 4.3正式发布了!在这个版本的开发和测试过程中,很多朋友也提供了宝贵意见和bug报告,为KlayGE的发展和完善做出了贡献,在此表示感谢。KlayGE 4.3的主要更新如下:
一个新的子项目KFL
脚本引擎(由王锐完成)
高质量细节效果
改进的Deferred Rendering
改进阴影生成(由李渊完成)
Deferred框架和GI分离
大量重构(论坛里的lcbiotech提出的建议)
大范围阴影支持
支持官方版Android NDK r8
全新的输入系统,支持触摸输入
非阻塞式资源载入和管理(论坛里的lcbiotech提出的建议)
增强的立体输出(由孙文全帮助测试)
支持嵌入其他GUI框架
支持多种OIT方 ...
前两年我曾经写过几篇关于AMD显卡上OpenGL驱动的陷阱,但原先我只在NV和AMD的卡上测试过KlayGE的例子,还从来没在Intel的集成显卡上测试过。前段时间曾经在Intel HD3000的笔记本上小测一下,结果惨不忍睹,所有的例子全部黑屏。最近在做KlayGE 4.3的最终测试和优化,就试图找一下失败的原因,以及修复的方法。这里把遇到的一些大坑总结一下,希望对遇到类似问题的朋友有所提示。
GLSL
所有例子都黑屏,最有可能的就是shader挂了。Debug下打开shader错误输出,果然,在NV和AMD驱动上都没事的GLSL遇到了编译失败。错误行是PS里的varying out vec4 v_gl_FragData。如果不用自定义的varying out,而用系统内建的gl_FragData就没事。所以判断应 ...
为了方便维护,各种编译器对C++11的支持比较已经挪到了这里。同时,还加入了ICC 14.0, GCC 4.8.1和Clang 3.3。
CPUWizard是我97年刚开始用C++的时候写的一个CPU检测和降温软件。完成功能之后就基本没有动过,除了2001年的时候加上一些对新CPU支持。有感于没找到一个CPU-Z的开源替代,同时CPUID SDK又得卖几千欧元的天价,我决定复活CPUWizard,并在近期作为GPL发布。
当然,十多年过去了,当时用的还是VC4.2或者VC5,内含大量汇编。现在虽然能直接编译,但CPU降温的部分已经失效(in/out/hlt这些指令在NT内核上必须ring 0才能执行),而且已经失去意义。所以复活后的版本就主打CPU检测的功能。同时还会做很多现代化的改造:
分为SDK和UI两层
cmake的项目文件,跨平台的代码,去掉汇编
支持现代的CPU
检测结果可以云存储
IE 10 for Windows 7在发布的时候,包含了一个补丁KB 2670838,给Win7带来了DirectX 11.1和DXGI 1.2的部分能力。这个补丁也可以在不需要IE10的时候单独安装。详细的更新内容在这里。比较有意思的是,WARP被升级到支持feature level 11.1了。
很遗憾的是,如果装了KB 2670838,PIX for Windows和D3D11_CREATE_DEVICE_DEBUG会受影响,因为DirectX SDK (June 2010)的debug runtime和KB 2670838不兼容。解决方法是安装Windows 8.0 SDK standalone,或者升级到使用Win8 SDK的VS 2012 Update 2。