UNPKG

itowns

Version:

A JS/WebGL framework for 3D geospatial data visualization

85 lines (69 loc) 3.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; /* babel-plugin-inline-import '../../Renderer/Shader/SampleTestFS.glsl' */ var SampleTestFS = "uniform sampler2D uni[SAMPLE];\nvoid main() {\n gl_FragColor += texture2D(uni[SAMPLE-1], vec2(0));\n}"; /* babel-plugin-inline-import '../../Renderer/Shader/SampleTestVS.glsl' */ var SampleTestVS = "void main() {\n gl_Position = vec4( 0.0, 0.0, 0.0, 1.0 );\n}"; // default values var logDepthBufferSupported = false; var maxTexturesUnits = 8; var maxTextureSize = 4096; function _WebGLShader(renderer, type, string) { var gl = renderer.getContext(); var shader = gl.createShader(type); gl.shaderSource(shader, string); gl.compileShader(shader); return shader; } function isFirefox() { return navigator && navigator.userAgent && navigator.userAgent.toLowerCase().includes('firefox'); } var _default = { isLogDepthBufferSupported: function isLogDepthBufferSupported() { return logDepthBufferSupported; }, isFirefox: isFirefox, isInternetExplorer: function isInternetExplorer() { var internetExplorer = false || !!document.documentMode; return internetExplorer; }, getMaxTextureUnitsCount: function getMaxTextureUnitsCount() { return maxTexturesUnits; }, getMaxTextureSize: function getMaxTextureSize() { return maxTextureSize; }, updateCapabilities: function updateCapabilities(renderer) { var gl = renderer.getContext(); maxTexturesUnits = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS); maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); var program = gl.createProgram(); var glVertexShader = _WebGLShader(renderer, gl.VERTEX_SHADER, SampleTestVS); var fragmentShader = "#define SAMPLE ".concat(maxTexturesUnits, "\n"); fragmentShader += SampleTestFS; var glFragmentShader = _WebGLShader(renderer, gl.FRAGMENT_SHADER, fragmentShader); gl.attachShader(program, glVertexShader); gl.attachShader(program, glFragmentShader); gl.linkProgram(program); if (gl.getProgramParameter(program, gl.LINK_STATUS) === false) { if (maxTexturesUnits > 16) { var info = gl.getProgramInfoLog(program); // eslint-disable-next-line no-console console.warn("".concat(info, ": using a maximum of 16 texture units instead of the reported value (").concat(maxTexturesUnits, ")")); if (isFirefox()) { // eslint-disable-next-line no-console console.warn("It can come from a Mesa/Firefox bug;\n the shader compiles to an error when using more than 16 sampler uniforms,\n see https://bugzilla.mozilla.org/show_bug.cgi?id=777028"); } maxTexturesUnits = 16; } else { throw new Error("The GPU capabilities could not be determined accurately.\n Impossible to link a shader with the Maximum texture units ".concat(maxTexturesUnits)); } } gl.deleteProgram(program); gl.deleteShader(glVertexShader); gl.deleteShader(glFragmentShader); logDepthBufferSupported = renderer.capabilities.logarithmicDepthBuffer; } }; exports["default"] = _default;