webgl速记之如何根据用户硬件进行性能模式OR质量模式的切换的设计思路

我遇到一个问题,我写了一份shader在不同的用户的机器上,会爆显存崩溃,我合成了几张巨大的纹理,一次上传,如果我分几个批次,就不会发生这个事情,然后性能就会相对下降

那么要处理这种事情,该怎么办,想了想,干脆就根据硬件级别来切换shader效果

var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');

var renderer = gl.getParameter(gl.RENDERER);
undefined
renderer
'WebKit WebGL'
var ext = gl.getExtension('WEBGL_debug_renderer_info');

if (ext) {
  var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
  var driver = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);

  console.log('厂商名称:', vendor);
  console.log('驱动程序版本:', driver);
}
输出
VM968:7 厂商名称: Google Inc. (Intel)
VM968:8 驱动程序版本: ANGLE (Intel, Intel(R) UHD Graphics 630 (0x00003E98) Direct3D11 vs_5_0 ps_5_0, D3D11)
VM63:14 厂商名称: Google Inc. (NVIDIA)
VM63:15 驱动程序版本: ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00001E89) Direct3D11 vs_5_0 ps_5_0, D3D11)

webgl根据这个接口,还是能查看一点硬件信息的
我们根据读到的字符串,检索到NVIDIA之后,再检索20 30 40这些字眼,进行区分高端机还是打火机
当然,这样功能实现可能就要写几份,但没办法

你可能感兴趣的:(图形学,1024程序员节,webgl,图形渲染)