经过谷歌的angle库能够在项目中,调用opengl接口渲染时,选择调用directx或者webgl来渲染,避免机器没有安装opengl驱动启动异常的问题。git
这个库的使用能够不修改原有使用opengl的功能上,使用directx绘制。github
如下是我在接入该库时遇到的一系类问题和心得:web
angle库能够在谷歌git上下载:windows
https://chromium.googlesource.com/angle/angleapi
针对windows 平台,微软也从谷歌原生angle上做出小修改:函数
https://github.com/Microsoft/angle工具
若是使用windows开发,建议使用微软的angle项目。性能
遇到的一些坑:测试
1.在绘制线条的时候,调用glDrawArray(GL_LINE, 0, 2)接口绘制线条时,directx渲染底层调用DrawPrimitive接口绘制,但该接口不知道控制线条的粗细、实虚线,须要本身在修改Renderer9.cpp(本人使用d3d9来渲染)的drawImpletment函数,webgl
使用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