这段时间一直在死磕 Chromium 的 8K 高清视频播放,虽然之前写过一些关键技术的实现,主要难点差不多攻破,但投入到产品中,依然还要解决很多实际中的问题,比如卡顿、格式支持、音视频不同步等等。前期的相关文章:
就在我准备歇口气的时候,又遇到了新的麻烦,这次的主角是 WebGL。
具体来说,运营方上线了一个业务,结果在浏览器中显示成这样:
一调查,这个业务的页面是使用 WebGL 实现的。
对我来说,WebGL 是一个全新的东西。从名字上来讲,这个 WebGL 和 OpenGL 有很大关系,事实也是如此。
WebGL 是一种基于 Web 的 3D 绘图标准,它可以让 Web 开发者利用 JavaScript 和 OpenGL ES 2.0 来创建和展示 3D 场景和模型。WebGL 通过在 HTML5 Canvas 元素上提供一个 JavaScript 绑定,可以让浏览器直接调用系统的显卡,实现硬件加速的 3D 渲染。这样, WebGL 不仅可以提高 Web 页面的交互性和视觉效果,还可以用于开发复杂的导航和数据可视化应用,甚至是 3D 网页游戏。
问题是我对 OpenGL 也不熟。
当前的情况比较尴尬,使用相同 chromium 代码编译出来的 Chromium Browser 或者 Content Shell,显示 WebGL 页面没有问题,但是基于 WebView 的浏览器就存在问题。更为尴尬的是,基于相同 Chromium 代码编译出的 SystemWebView, 放到其它的硬件平台上也没有问题。
所以接下来的调查方向有两个:
两条路都很难,本来编写 OpenGL 程序就是一个相当难的事情,现在还要去弄清楚背后是怎么去实现的。调查硬件驱动更是难,和具体的硬件绑定太深。
说起 WebGL,估计很多人比较陌生,现实中似乎也应用得不多。但实际上,WebGL 还是一个不错的技术:
现实中也存在许多 WebGL 的应用场景:
这次暴露问题的业务就是在线博物馆,遇到问题也没法逃避,只能迎头直上,接下来需要恶补一些 OpenGL 和 WebGL 的知识了。
后续有收获,会和大家一起分享,欢迎围观!