{"version":3,"file":"WebGLProbe.mjs","names":[],"sources":["../../../../src/filters/GLProbes/WebGLProbe.ts"],"sourcesContent":["import { log } from '../../util/internals/console';\nimport { GLProbe } from './GLProbe';\nimport type { GLPrecision } from './GLProbe';\n\n/**\n * Lazy initialize WebGL constants\n */\nexport class WebGLProbe extends GLProbe {\n  declare maxTextureSize?: number;\n\n  /**\n   * Tests if webgl supports certain precision\n   * @param {WebGL} Canvas WebGL context to test on\n   * @param {GLPrecision} Precision to test can be any of following\n   * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n   */\n  private testPrecision(\n    gl: WebGLRenderingContext,\n    precision: GLPrecision,\n  ): boolean {\n    const fragmentSource = `precision ${precision} float;\\nvoid main(){}`;\n    const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n    if (!fragmentShader) {\n      return false;\n    }\n    gl.shaderSource(fragmentShader, fragmentSource);\n    gl.compileShader(fragmentShader);\n    return !!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS);\n  }\n\n  /**\n   * query browser for WebGL\n   */\n  queryWebGL(canvas: HTMLCanvasElement) {\n    const gl = canvas.getContext('webgl');\n    if (gl) {\n      this.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n      this.GLPrecision = (['highp', 'mediump', 'lowp'] as const).find(\n        (precision) => this.testPrecision(gl, precision),\n      );\n      gl.getExtension('WEBGL_lose_context')!.loseContext();\n      log('log', `WebGL: max texture size ${this.maxTextureSize}`);\n    }\n  }\n\n  isSupported(textureSize: number) {\n    return !!this.maxTextureSize && this.maxTextureSize >= textureSize;\n  }\n}\n"],"mappings":";;;;;;AAOA,IAAa,aAAb,cAAgC,QAAQ;;;;;;;CAStC,cACE,IACA,WACS;EACT,MAAM,iBAAiB,aAAa,UAAU;EAC9C,MAAM,iBAAiB,GAAG,aAAa,GAAG,gBAAgB;AAC1D,MAAI,CAAC,eACH,QAAO;AAET,KAAG,aAAa,gBAAgB,eAAe;AAC/C,KAAG,cAAc,eAAe;AAChC,SAAO,CAAC,CAAC,GAAG,mBAAmB,gBAAgB,GAAG,eAAe;;;;;CAMnE,WAAW,QAA2B;EACpC,MAAM,KAAK,OAAO,WAAW,QAAQ;AACrC,MAAI,IAAI;AACN,QAAK,iBAAiB,GAAG,aAAa,GAAG,iBAAiB;AAC1D,QAAK,cAAe;IAAC;IAAS;IAAW;IAAO,CAAW,MACxD,cAAc,KAAK,cAAc,IAAI,UAAU,CACjD;AACD,MAAG,aAAa,qBAAqB,CAAE,aAAa;AACpD,OAAI,OAAO,2BAA2B,KAAK,iBAAiB;;;CAIhE,YAAY,aAAqB;AAC/B,SAAO,CAAC,CAAC,KAAK,kBAAkB,KAAK,kBAAkB"}