Spaces:
Running
Running
File size: 3,204 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | function WebGLCapabilities(gl, extensions, parameters) {
let maxAnisotropy;
function getMaxAnisotropy() {
if (maxAnisotropy !== undefined) return maxAnisotropy;
if (extensions.has('EXT_texture_filter_anisotropic') === true) {
const extension = extensions.get('EXT_texture_filter_anisotropic');
maxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
} else {
maxAnisotropy = 0;
}
return maxAnisotropy;
}
function getMaxPrecision(precision) {
if (precision === 'highp') {
if (
gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 &&
gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0
) {
return 'highp';
}
precision = 'mediump';
}
if (precision === 'mediump') {
if (
gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 &&
gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0
) {
return 'mediump';
}
}
return 'lowp';
}
const isWebGL2 =
(typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) ||
(typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext);
let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
const maxPrecision = getMaxPrecision(precision);
if (maxPrecision !== precision) {
console.warn('THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.');
precision = maxPrecision;
}
const drawBuffers = isWebGL2 || extensions.has('WEBGL_draw_buffers');
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
const maxVertexTextures = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
const maxCubemapSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);
const maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
const maxVertexUniforms = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);
const maxVaryings = gl.getParameter(gl.MAX_VARYING_VECTORS);
const maxFragmentUniforms = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);
const vertexTextures = maxVertexTextures > 0;
const floatFragmentTextures = isWebGL2 || extensions.has('OES_texture_float');
const floatVertexTextures = vertexTextures && floatFragmentTextures;
const maxSamples = isWebGL2 ? gl.getParameter(gl.MAX_SAMPLES) : 0;
return {
isWebGL2: isWebGL2,
drawBuffers: drawBuffers,
getMaxAnisotropy: getMaxAnisotropy,
getMaxPrecision: getMaxPrecision,
precision: precision,
logarithmicDepthBuffer: logarithmicDepthBuffer,
maxTextures: maxTextures,
maxVertexTextures: maxVertexTextures,
maxTextureSize: maxTextureSize,
maxCubemapSize: maxCubemapSize,
maxAttributes: maxAttributes,
maxVertexUniforms: maxVertexUniforms,
maxVaryings: maxVaryings,
maxFragmentUniforms: maxFragmentUniforms,
vertexTextures: vertexTextures,
floatFragmentTextures: floatFragmentTextures,
floatVertexTextures: floatVertexTextures,
maxSamples: maxSamples,
};
}
export { WebGLCapabilities };
|