上一篇讲到了如何填平OpenGL和D3D之间一些原本被认为位于底层的区别。本篇将剖析两个API在功能上的异同,以及直接相互访问的可能性。
功能
D3D9的功能早已被OpenGL 2.0所覆盖,网上可以找到很多资料,这里就不提了。本文注重的是新的GPU特性。下表列出了D3D10+的新功能,以及实现该功能所需要的OpenGL扩展或核心。
D3D 10的功能
OpenGL所对应的
Geomrtry shader
GL_ARB_geometry_shader4或OpenGL 3
Stream output
GL_EXT_transform_feedback或OpenGL 3
State对象
无,需要在上层封装GL_EXT_direct_state_access
Constant buffer
GL_ARB_uniform_buffer_object或OpenGL 3
Texture array和新的资源格式 ...
[zh]
KlayGE经历了3.12的合作开发的成功之后,正式向着下一个大版本4.0迈进!4.0不追求有多少新功能,主要目标是对现有的东西进行整合和优化,成为更有效更简单实用的开发框架。该版本大约在2011年12月份发布,这里列出目前的新功能计划。
系统要求变化
支持Shader model 4.0的显卡
必然出现
这些特性一定会出现在KlayGE 4.0中,都有明确的实现方法,不确定性因素较小。
Deferred Rendering层
资源载入框架
优化GI
支持render-to-texture-array
Phong Tessellation
Dual Quaternions蒙皮
可能出现
可能出现的特性要么存在比较大不确定性,要么优先级较低,是否会出现在KlayGE 4.0取决于时间关系。
移植到A ...
今天在Android的开发网站看到了google已经发布Android 3.2 SDK,目前API level已经升到13。和之前的传闻一样,Android 3.2主要目标是更好地支持7寸平板。
新的用户功能
针对更多平板设备的优化
让固定分辨率的应用也可以兼容式缩放显示
SD卡媒体同步
新的开发功能
增加了用于控制屏幕的API
NDK也升级到了r6。最显著的更新是支持了x86 ABI,看来android将要大举进驻x86已经毫无疑问了。
另一个好消息是,Android的开发网站不再被墙,国内可以直接访问。
上一篇提出了跨越OpenGL和D3D的基本问题,介绍了一些能在不改变API的情况下,通过输入数据来消除OpenGL和D3D之区别。本篇的重点是如何利用现代OpenGL提供的扩展和新功能,消除一些无法在上层解决的问题。
顶点颜色顺序
D3D9 最常用的顶点颜色格式是BGRA格式(也就是D3DCOLOR),而OpenGL默认用的是RGBA格式。D3D9用BGRA纯粹是因为历史原因,早期硬 件不支持UBYTE4的格式,只能用D3DCOLOR,然后再shader里调用D3DCOLORtoUBYTE4。现在的GPU都支持 UBYTE4,D3D10+也是可以直接使用RGBA,所以这已经不是问题了。
如果需要兼容已经生成BGRA格式数据,现代OpenGL提供了GL_EXT_vertex_array_bgra这个扩展,也可以使用BGRA作为顶点颜色输入格式 ...
多年来,在论坛和各个网站上不断能看到拿OpenGL和D3D进行比较的帖子和文章。他们经常制造很多谜思,使得初学者和一些从业人员对OpenGL和D3D产生了各种各样的流言。
有人说,OpenGL直接调到驱动,性能高于D3D。
有人说,Shader都得写两套,很麻烦。
有人说,OpenGL和D3D在底层有很多区别,而且不可设置。
有人说,图形引擎如果要兼容两者,就只能取其功能的交集,最后还不如任何一种API。
真的么?
本文试图:
找出现代OpenGL和D3D的共通之处
归纳如何让API对上层代码尽量透明
本文不希望:
讲解函数间的对应关系
如何在OpenGL和D3D之间作选择
贬低一方,抬高另一方
下面先从几个比较基本的方面 ...
[zh]在网友cin的帮助下,KlayGE的国际论坛上线了!目前包含英文论坛和俄文论坛。中文论坛仍是由opengpu提供的。[/zh]
[en]With cin's help, the international forum of KlayGE goes online! At present, it contains English forum and Russian forum. The Chinese forum is still provided by opengpu.[/en]
昨晚写了我的第一个WebGL程序,主要是用来测试浏览器对WebGL的支持程度,有兴趣的朋友可以看看。
WebGL test
[zh]
KlayGE 3.12.0在上半年的最后一天发布了!本版的亮点是支持实时全局光照。主要更新如下:
支持全局光照
包含第三方库及其编译脚本
增加了Maya导出插件
支持Dual Paraboloid Shadow Map
增加了多种模式的BC1-BC5纹理压缩函数
增加了cmake工程脚本
支持Filmic tonemapping
支持FXAA和Temporal AA
KlayGE 3.12.0的很多功能是由组员完成的。感谢吴彧文提供的GI,感谢王锐、朱晓阳、honyeung Lau提供的Maya插件,感谢张亚川提供的DPSM,感谢陈顺斌、郭鹏提供的FXAA和Temporal AA,感谢王锐提供的cmake工程脚本。更感谢大家这么多年来的支持和帮助!
从此处下载KlayGE 3.12.0。
[/zh]
[en]
KlayGE 3.12.0 r ...
即将召开的High-Performance Graphics 2011上有篇文章叫作High-Performance Software Rasterization on GPUs,作者是NVIDIA Research的Samuli Laine和Tero Karras(没错,Efficient Sparse Voxel Octrees也是他们)。他们在GPU上用CUDA构造出了一个软件光栅化组件,光栅化算法类似于Larrabee(以及开源软件渲染器SALVIA):先把primitive分到多个bin中,然后subdivide成像素级别的大小。不过它把subd阶段分为Coarse和Fine两个阶段,用不同的线程粒度完成。Larrabee里面也有这么分的,不过是连着做完,不是两个独立的阶段。
对光栅化算法感兴趣的同学不妨看看此文。
作者主页
PDF下载
昨天收到了小顺提交的FXAA和TAA代码,现在已经集成进KlayGE。目前实现的FXAA是在颜色上检测边缘的,效果较好,但运算量也上去了。啥都不说,上图!
[caption id="attachment_1207" align="aligncenter" width="648" caption="没有经过抗锯齿的场景"][/caption]
[caption id="attachment_1205" align="aligncenter" width="648" caption="经过FXAA抗锯齿过的场景"][/caption]
对局部细节做一个放大比较:
[caption id="attachment_1208" align="aligncenter" width="407" caption="局部比较"][/caption]
边缘的情况如下,因为是基于颜色的边缘,所以需要AA的像素较多。
[caption id="attachment_1213" align="aligncenter" ...