0x00Wedge最近客户在使用我们的3D可视化平台时,浏览器总是崩溃,webgl上下文丢失。这种错误一般发生在电脑配置很低的电脑上,比如没有独立显卡的电脑,现有的只有小块集成显卡。但是,大部分客户的电脑配置都不错,都有独立显卡。经过摸索和分析,终于找到了问题所在:电脑根本就没有使用独立显卡,也就是说虽然硬件上有独立显卡,但3D程序实际使用的是集成显卡,这使得它无法运行3D程序。如何判断3D节目是否使用独立显卡?其实我们可以打开电脑的任务管理器,打开“性能”选项卡。一般我们可以看到两个GPU(Intel开头的是集成显卡,NVIDIA开头的是独立显卡)。从图中可以看出,GPU0(集显)的利用率达到了88%,而GPU1(独显)的利用率不为0,说明3D应用没有使用独显。0x01原因排查经过测试,发现电脑不使用独立显卡的原因大致分为几类:驱动未正确安装。可以用电脑的设备管理器查看是否有独立显卡的适配器。如果没有,很可能是显卡驱动没有安装。显示器不接独立显卡,台式机接主板自带的VGA/DVI/HDMI,核显负责输出和计算,不接独立显卡的接口显示不能起到任何作用。反之,如果连接了独显,CPU核显也会自动被屏蔽。一个典型的例子就是,如果你连接一块独立显卡,比如N卡,那么只有一个NVIDIA的控制面板,并没有Intel核心显卡的控制界面。如果是笔记本,一般带DP接口的肯定是独显接口。HDMI、VGA等其他接口都是核显输出,但笔记本的硬性规定是核显负责画面输出,独显负责需要运行的3D应用。这是Intel强制要求的,所以除了N卡独显的NVIDIA控制面板外,笔记本还会有Intel核心显卡控制面板。值得注意的是,有的bios提供了屏蔽6代后核心显卡的选项,有的允许自由切换,或者一些超高端笔记本,显卡是1070、1080甚至1080SLI,都是出厂时直接屏蔽了核显,就不用这个核显了。测试显示,对于核显1070以上的笔记本机型,一些优化不好的游戏会拖累独显的性能,导致帧数下降,整体帧率略低于单独运行独立显示。本方案规定使用集成显卡的笔记本电脑,该电脑可同时使用集成显卡和独立显卡。打开电脑NVIDIA控制面板,可以指定程序是使用独立显卡还是集成显卡,如下图:如果指定浏览器,比如chrome使用集成显卡,那么webgl就不会使用独立显卡。0x02如何解决其实看完前面的《原因探究》,就可以轻松给出对应的解决方案了。如果没有安装显卡驱动,直接安装显卡驱动即可。安装时需要注意选择正确的版本。如果是台式电脑,检查显示器接头是否连接到独立显卡的接口上。如果接在集成显卡的接口上,换个接口就行了。如果程序指定了集成显示,则可以更改为使用独立显示。该过程不详细描述。0x03结论如果你发现电脑的配置很好,但是简单的3D应用卡住了,可能是以上原因造成的。对可视化感兴趣的可以和我交流,微信541002349。关注公众号“ITMan表叔”,及时收到更多有价值的文章。
