Update isAppleSilicon() helper method to also check for WebGL renderer info #732

This commit is contained in:
Faisal Salman 2024-07-27 10:57:11 +07:00
parent 654285cf9c
commit c391d8a73c

View File

@ -9,7 +9,25 @@
const { CPU, OS, Engine } = require('../enums/ua-parser-enums'); const { CPU, OS, Engine } = require('../enums/ua-parser-enums');
const isAppleSilicon = (res) => res.os.is(OS.MACOS) && res.cpu.is(CPU.ARM); const isAppleSilicon = (res) => {
if (res.os.is(OS.MACOS)) {
if (res.cpu.is(CPU.ARM)) {
return true;
}
try {
const canvas = document.createElement('canvas');
const webgl = canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
const debug = webgl.getExtension('WEBGL_debug_renderer_info');
const renderer = webgl.getParameter(debug.UNMASKED_RENDERER_WEBGL);
if (renderer.match(/apple m\d/i)) {
return true;
}
} catch {
return false;
}
}
return false;
}
const isChromeFamily = (res) => res.engine.is(Engine.BLINK); const isChromeFamily = (res) => res.engine.is(Engine.BLINK);