为迎接即将到来的OpenGL ES 3.0(开发代号Halti),KlayGE的OpenGLES2插件正式更名为OpenGLES,以保持兼容性。同时,还增加了OGLESConditionalRender,通过GL_EXT_occlusion_query_boolean来实现遮挡查询。
另外说说OpenGL ES 3。在2007年的OpenGL ES Overview里面就有提到代号为Halti的OGLES3,是基于OpenGL 3.0来开发,目标发布时间是2010年。但现在显然延期了很久。终于,在前不久的CES2012上,Imagination Technologies宣布了PowerVR6,支持OpenGL ES 3、OpenGL 3、D3D 10和OpenCL。特定型号还可以支持D3D11.1和OpenGL 4。之前ARM也宣布了Mali-6xx支持OpenGLES 3、D3D11和OpenCL 1.1。同样,Qualcomm的Adreno 3xx也会支持OpenGL ES 3 ...
经过这几天的的开发和调试,KlayGE的所有例子都在NVIDIA的OpenGL ES模拟器上顺利运行了。除了没有GI、distance mapping退化成normal mapping、以及由于缺少float texture而不能实现高精度DoF之外,其他效果都和D3D11和OpenGL一致。
Tegra 2模拟器的问题
NVIDIA的OpenGL ES模拟器的模拟对象是Tegra 2,但支持的扩展不如真的Tegra 2。Tegra 2真机支持的OpenGL ES扩展有(来自Xoom):
GL_ARB_draw_buffers
GL_EXT_bgra
GL_EXT_Cg_shader
GL_EXT_packed_float
GL_EXT_texture_array
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_latc
GL_EXT_texture_compression_s3tc
GL_EXT_texture_filter_anisotropic
GL_EXT_te ...
[zh]
上个星期,经过整个团队半年的努力,KlayGE迈进了4.0这个大版本!紧接着就是开始计划4.1的开发了。该版本大约在2012年6月发布,这里列出目前的新功能计划。
必然出现
这些特性一定会出现在KlayGE 4.1中,都有明确的实现方法,不确定性因素较小。
屏幕空间反射
FFT Bloom filter
基于Postprocess的stereo
通过Importance sampling加速GI(开发中)
Collision detection函数库
进一步提升OpenGL ES 2兼容性
可能出现
可能出现的特性要么存在比较大不确定性,是否会出现在KlayGE 4.1取决于时间关系。
大气散射效果(开发中)
SSGI
不会出现
这些东西不会在KlayGE 4.1中出现,所以不必再提了。
各种编 ...
从KlayGE 4.0开始,KlayGE转为使用双协议。默认的协议仍然是开放源代码的GPL。对于不适合用GPL的用户,在缴纳授权费的情况下,可以选择另一个协议,称为KlayGE Proprietary License(KPL)。因此对于需要避开GPL条款的用户,也有机会为项目购买另一个协议的KlayGE。
详细情况请见Licensing。
[zh]
经过KlayGE团队半年的努力,KlayGE 4.0.0正式发布了!作为一个大版本,KlayGE开始由一堆发散的功能集走向一个以Deferred Rendeirng为核心的系统。并且开始支持新平台Android。主要更新如下:
Deferred Rendering layer集成到核心中
全局光照得到了很大的加速
支持Android(在王锐的协助下完成)
支持实时焦散(由Parsifal Wang完成)
蒙皮动画支持Dual quaternion(由Honyeung Lau、Xiaoyang Zhu完成)
增加了资源载入框架(由郭鹏设计)
改进的SSVO(由吴野完成)
骨骼数据压缩
用Phong Tessellation代替PN-Triangles
支持渲染到纹理数组
支持parallax occlusion mapping
从此处下载KlayGE 4.0.0。
...
在KlayGE的空框架跑起来之后,经过几天艰苦的debug,修正了多个KlayGE的bug,绕开更多Android的bug。现在,Text和Vertex displacement两个例子已经能在Android上顺利执行了。
Text例子。乱码不是bug,只因为系统区域没设置成中文。
Vertex displacement例子。
在移植的过程中,遇到的一个麻烦是NDK的ANativeWindow_getWidth和ANativeWindow_getHeight总是返回1,无法得到正确的窗口大小。结果viewport被错误地设置成1x1,使得渲出的东西都只有1个pixel。在修改了native_app_glue,获取resize的消息后,viewport大小终于得到了正确的设置。那两个例子才因此能正常执行。从这里也可以看出,Android的NDK千疮百孔,开发的时候要异常小 ...
[zh]
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里的所有最新的扩展也都支持了。
请从这里下载。
[/zh]
[en]
The glloader, a subproject of Klay Game Engine, is an OpenGL extension loading library. It supports OpenGL core 1.0 to 4.2, OpenGL ES core 1.0 to 2.0, as well as WGL, GLX, EGL and other ...
由于sourceforge和bitbucket在国内的访问速度较慢,我在codeplex上申请了个空间http://klayge.codeplex.com/用于存放KlayGE的repository。Mercurial clone的地址是https://hg01.codeplex.com/klayge。如果你不满现在的访问速度,可以考虑用这个新的。
[zh]
继glloader移植到Android之后,KlayGE也可以在Android上执行了。虽然,严格来说,只是能跑最最基本的空框架。
由于我没有Android真机,模拟器又无法执行OpenGL ES 2,所以我的测试方法是在最老的Asus EeePC上执行Android x86。空框架EmptyApp目前可以顺利执行:
[/zh]
[en]
After porting glloader to Android, KlayGE can be run on Android too. Technically, it's only a empty framework.
Since I don't have a real Android device, and the emulator can't run OpenGL ES 2, I have to test it on an old Asus EeePC with Android x86. The empty framework "EmptyApp" runs well on it:
[/en]
[zh] ...
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的例子,从NDK自带的native-activity修改而来。从这里可以看出,从原先的直接调用GLES改为使用glloader之需要修改#include和link选项。
native-activity.7z
需要注意的是,由于NDK r6的 ...