import Device from 'ismobilejs'; /** * The maximum recommended texture units to use. * In theory the bigger the better, and for desktop we'll use as many as we can. * But some mobile devices slow down if there is to many branches in the shader. * So in practice there seems to be a sweet spot size that varies depending on the device. * * In v4, all mobile devices were limited to 4 texture units because for this. * In v5, we allow all texture units to be used on modern Apple or Android devices. * * @param {number} max * @returns {number} */ export default function maxRecommendedTextures(max) { let allowMax = true; if (Device.tablet || Device.phone) { allowMax = false; if (Device.apple.device) { const match = (navigator.userAgent).match(/OS (\d+)_(\d+)?/); if (match) { const majorVersion = parseInt(match[1], 10); // All texture units can be used on devices that support ios 11 or above if (majorVersion >= 11) { allowMax = true; } } } if (Device.android.device) { const match = (navigator.userAgent).match(/Android\s([0-9.]*)/); if (match) { const majorVersion = parseInt(match[1], 10); // All texture units can be used on devices that support Android 7 (Nougat) or above if (majorVersion >= 7) { allowMax = true; } } } } return allowMax ? max : 4; }