Newer
Older
pixi.js / packages / utils / src / browser / isWebGLSupported.js
let supported;

/**
 * Helper for checking for WebGL support.
 *
 * @memberof PIXI.utils
 * @function isWebGLSupported
 * @return {boolean} Is WebGL supported.
 */
export function isWebGLSupported()
{
    if (typeof supported === 'undefined')
    {
        supported = (function supported()
        {
            const contextOptions = { stencil: true, failIfMajorPerformanceCaveat: true };

            try
            {
                if (!window.WebGLRenderingContext)
                {
                    return false;
                }

                const canvas = document.createElement('canvas');
                let gl = canvas.getContext('webgl', contextOptions)
                    || canvas.getContext('experimental-webgl', contextOptions);

                const success = !!(gl && gl.getContextAttributes().stencil);

                if (gl)
                {
                    const loseContext = gl.getExtension('WEBGL_lose_context');

                    if (loseContext)
                    {
                        loseContext.loseContext();
                    }
                }

                gl = null;

                return success;
            }
            catch (e)
            {
                return false;
            }
        })();
    }

    return supported;
}