通过谷歌的angle库可以在项目中,调用opengl接口渲染时,选择调用directx或者webgl来渲染,避免机器没有安装opengl驱动启动异常的问题。
这个库的使用可以不修改原有使用opengl的功能上,使用directx绘制。
以下是我在接入该库时遇到的一系类问题和心得:
angle库可以在谷歌git上下载:
https://chromium.googlesource.com/angle/angle
针对windows 平台,微软也从谷歌原生angle上作出小修改:
https://github.com/Microsoft/angle
如果使用windows开发,建议使用微软的angle项目。
遇到的一些坑:
1.在绘制线条的时候,调用glDrawArray(GL_LINE, 0, 2)接口绘制线条时,directx渲染底层调用DrawPrimitive接口绘制,但该接口不知道控制线条的粗细、实虚线,需要自己在修改Renderer9.cpp(本人使用d3d9来渲染)的drawImpletment函数,
使用ID3DXLine接口绘制线条。
2.性能问题,由于angle库调用opengl或者directx时,需要转换各自渲染接口所需的顶点格式或者着色器等等,转换过程需要消耗一定的cpu运算能力,如果在一帧需要同时大量绘制操作,建议不适用该库。如果在内存允许的情况下,(本人在一帧中测试,绘制九千条线,fps会从30帧下降到10多帧,出现明显卡顿)。
可以打包绘制的顶点数据,一次性绘制完成,消耗更多的内存,换取性能。
3.关于xp系统下的使用问题,官方指出只能通过vs 2015及最新版本编译,并且使用windows sdk10以上编译,很显然该库不支持xp系统下运行,而且xp系统也不支持directx 11的绘制。我后面改用vs 2015编译, 平台工具集选择 “Visual Studio 2013 - Windows XP (v120_xp)”,删除directx11 的api,不使用系统自带的direct库和头文件, 改用directx sdk的库和头文件,
删除不兼容xp的api,最后编译成库在xp系统下运行,实现过程相当繁琐,工作量也多,并且后续bug维护难以修复,毕竟不是官方开发人员。
最后总结一下angle的优缺点:
优点:跨平台切换渲染方式,不担心设备使用环境或缺失驱动问题。
缺点:性能一般,不适用大量绘制,不兼容老系统xp,directx 不兼容控制线条粗细。
转载请注明出处, from 博客园HemJohn