Skip to content
最近工作太忙,放在KlayGE上的时间不如以前多了。最近有些新工具上线,这里介绍一下。 编辑器 大家期盼已久的编辑器终于有个雏形了,名叫KGEditor。 WPF/C#的外壳,接入KlayGE的核心,可以双向调用。目前实现的功能很简单,只能编辑静态场景。在未来的版本中需要着重发展这个编辑器,也希望有经验的朋友们可以提供帮助。 纹理查看工具 KlayGE的纹理用的DDS格式。但原先DX SDK的纹理查看工具不支持DX10的扩展格式,VS2015的又缺乏一些功能,比如不能调节整体亮度。而且由于我对DDS格式做了略微的扩展,可以放入ETC压缩的纹理,这都要求有一个自己的纹理查看工具,方便开发中使用。 该工具可以方便地打开/关闭某个通道,查看 ...
KlayGE 4.9的开发已经开始。作为第一步,把工程系统整理好,会让新版本的开发和使用更为顺利。所以从几个版本前开始,工程系统的改进总是先行一步。目前这一步已经完成,在这里写个帖子总结一下。 继续停止支持老编译器 不再支持vc110(VS2012)和gcc 4.6-4.7。这样可以去掉很多为了这些老编译器特别写的workaround,提高代码质量。由于剩下支持的编译器都有很好的C++11兼容性,现在可以用绝大部分C++11特性了。C++14也可以适度使用。 合并到同一个solution 很久以前就想这么做。这样对代码搜索和构建都方便。但以前的Visual Studio并不能支撑同一个sln里有那么多项目,经常出现性能严重下降或者崩溃的情况。而现在情况好了很多,终于可 ...
按照惯例,KlayGE 4.8发布之后,新版本的开发也会立刻开始。这里公布一些我对KlayGE 4.9的计划,更开发组成员和用户参考。这些其实大部分在4.8发布之前就已经计划好。和以前一样,欢迎有兴趣、有时间加入KlayGE 4.9开发阵营的朋友们继续参加。由于打算用到assimp和glsl-optimizer,也希望在这方面有经验的朋友能给予帮助。 时间线 这里列出几个重要的时间点,以供进度参考。 2016年5月31日,feature complete:所有功能都已经完成,没完成的推迟到下一个版本。 2016年6月15日,code complete:完成所有代码,除非特殊情况,否则不能在改变接口。 2016年6月30日,release:正式发布KlayGE 4.9。 必然出现 这些特性一定会出现在K ...
[zh] 大家圣诞节和新年快乐。又到了6个月一次的KlayGE发布时间,今天KlayGE 4.8正式发布了!在这个版本的开发中,有一些功能是由团队成员完成的,同时也有很多朋友提供了宝贵的建议和bug报告,在此表示感谢。由于开发设备的限制,难免有一些测试不足的情况,尽请见谅。KlayGE 4.8的主要更新如下: 引擎方面的改进 D3D12插件。 异步资源创建,简化资源载入的代码。 增加CPU和GPU的同步原语支持,支持手动同步管理。 在OpenGL/OpenGLES里支持texture array。 加速反射的渲染。 SIMD数学库,把现有的数学库扩展成支持SIMD的实现。(由刘智超和倪成丹完成) 重构了shader编译的工作流。(由钱康来协助完成) 增加了使用音 ...
Win10 TH2 (10586)正式版已于11月12日发布,其SDK也在11月30日随着VS2015 Update 1正式发布。本来不觉得D3D/DXGI部分会有什么变化,毕竟没有任何正式宣布。但SDK里俨然出现了d3d11_4.h和dxgi1_5.h。换句话说,D3D 11.4和DXGI 1.5就这么悄悄发布了。 但是,到目前为止,不管是msdn还是网上搜索,都找不到没有任何资料。从头文件的内容来看,其实与其说是一个新版本,不如说是对以前的略微增强。下面我们就来看看到底变了什么。 D3D 11.4 d3d11_4.h里面,唯一增加的是定义了ID3D11Device4,包含两个新函数。 HRESULT RegisterDeviceRemovedEvent(HANDLE hEvent,  DWORD *pdwCookie); void UnregisterDeviceRemoved(DWORD dwCookie); 从 ...
去年,KlayGE就已经有了Windows Store的版本和Windows Phone的版本。随着Win10的推出,UWP成了统一两者的平台。CMake 3.4加入了UWP的支持之后,KlayGE也很顺利地增加了UWP的支持。 UWP的用法 在CMake 3.4中用UWP非常简单,和原先用Windows Store的完全一样,只是系统版本号改成10,仅此而已(-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0)。所以代码其实都没改,只需要增加一个UWP的manifest。为了方便起见,在代码和CMake里定义了KLAYGE_PLATFORM_WINDOWS_UWP,用来表明是UWP的build。 另一个细节需要注意,在UWP应用里,小图标的大小是44x44,而不是30x30。 ARM的桌面 UWP讲究一份代码各种架构。但在编译ARM ...
自从Win8引入WinRT以来,主流开发者的说法一直是,C++/CX可以方便地把现有C++代码移植到WinRT。一般来说确实如此,绝大部分原有C++代码可以的保留,只需要写UI的部分就可以了。但因为C++/CX的引入,还是会带来一些副作用,不完全都是好处。本篇将以KlayGE为例,讲解如何在不用C++/CX的情况下完成WinRT应用(包括UWP)。 C++/CX的功与过 C++/CX使用起来挺方便,语法和原先的C++/CLR极其相似,但是native的,没有虚拟机执行开销。任何懂C++的人都可以很快上手,把程序移植到WinRT。同时,WinRT背后一大套COM机制都被隐藏掉了,可以直接用普通的类一样使用COM对象。 但是,仔细观察就能发现,在C++项目中加入C++/CX有几个缺点。 C++/CX ...
本系列前面的五篇已经让引擎可以在D3D12下跑通所有的例子。但这并不代表功能已经齐全。其中很多例子能跑通的原因,是因为例子本身有fall back的代码,允许在没有各种高级功能的情况下运行。Compute shader就是其中的一个。本篇将会讲解如何加入compute shader,以及在此过程中遇到的一个大坑。 计算引擎 和以前的API不同的是,D3D12是个多引擎的API,可以让硬件的不同的独立部分异步执行,以提高效率。D3D12里的引擎有,渲染引擎、计算引擎和拷贝引擎。这三个引擎有不同的指令队列,可以在程序的控制下并行执行和互相同步。所以,在D3D12里,推荐的做法是,渲染和计算分开,放到不同引擎执行。所以虽然compute shader也可以在渲染引擎执行 ...
Universal DX SDK的第二阶段也完成了。新加了一个批处理文件,用于从系统的.dll生成.lib或者.a。 这个脚本支持vc7-vc14,以及mingw。只要装了这些中的任意一个,执行脚本的时候,它就会从System32或SysWOW64中挑选需要的dll,从中生成vc所有用的导入库lib,或者mingw所用的导入库.a,放到Lib下。如此一来,非动态载入的情况也可以使用Universal DX SDK。 目前我的实验是,在KlayGE里用Universal DX SDK,在VS2013下开发D3D12的东西,包括桌面应用和WinRT应用。目前为止一切正常,程序可以编译链接运行。
前两天刚宣布了一个新的开源项目,Universal DX SDK,现在以完成了第一阶段。 在现在的master分支里,头文件已经被更新到Win10 SDK 10.0.10240.0,并作出一些修改: 注掉了winapifamily.h相关的代码,以适用于VS2010及以前的vc,和MinGW/Clang。 在MinGW下编译不会出现warning。 这么一来,如果用LoadLibrary进行动态载入,只需要头文件的话,在各种编译器下都能使用Universal DX SDK,支持D3D 9-12、DXGI 1.1-1.4、DInput、DSound、D2D 1.1-1.3、DWrite 1.1-1.3、XAudio等,并支持古老的XNAMath、D3DX 9-11等。基本可以满足各种对DX的需求。 经过KlayGE的实验,用了Universal DX SDK之后,大部分根据SDK版本进行的#ifdef都可 ...