import { PRECISION } from '@pixi/constants'; /** * Sets the float precision on the shader, ensuring the device supports the request precision. * If the precision is already present, it just ensures that the device is able to handle it. * * @private * @param {string} src - The shader source * @param {string} requestedPrecision - The request float precision of the shader. Options are 'lowp', 'mediump' or 'highp'. * @param {string} maxSupportedPrecision - The maximum precision the shader supports. * * @return {string} modified shader source */ export default function setPrecision(src, requestedPrecision, maxSupportedPrecision) { if (src.substring(0, 9) !== 'precision') { // no precision supplied, so PixiJS will add the requested level. let precision = requestedPrecision; // If highp is requested but not supported, downgrade precision to a level all devices support. if (requestedPrecision === PRECISION.HIGH && maxSupportedPrecision !== PRECISION.HIGH) { precision = PRECISION.MEDIUM; } return `precision ${precision} float;\n${src}`; } else if (maxSupportedPrecision !== PRECISION.HIGH && src.substring(0, 15) === 'precision highp') { // precision was supplied, but at a level this device does not support, so downgrading to mediump. return src.replace('precision highp', 'precision mediump'); } return src; }