Spaces:
Running
Running
| /** | |
| * @author mrdoob / http://mrdoob.com/ | |
| */ | |
| function WebGLCapabilities( gl, extensions, parameters ) { | |
| var maxAnisotropy; | |
| function getMaxAnisotropy() { | |
| if ( maxAnisotropy !== undefined ) return maxAnisotropy; | |
| var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); | |
| if ( extension !== null ) { | |
| 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'; | |
| } | |
| var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext; | |
| var precision = parameters.precision !== undefined ? parameters.precision : 'highp'; | |
| var maxPrecision = getMaxPrecision( precision ); | |
| if ( maxPrecision !== precision ) { | |
| console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); | |
| precision = maxPrecision; | |
| } | |
| var logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; | |
| var maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); | |
| var maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ); | |
| var maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE ); | |
| var maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ); | |
| var maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); | |
| var maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ); | |
| var maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS ); | |
| var maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ); | |
| var vertexTextures = maxVertexTextures > 0; | |
| var floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' ); | |
| var floatVertexTextures = vertexTextures && floatFragmentTextures; | |
| var maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0; | |
| return { | |
| isWebGL2: isWebGL2, | |
| 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 }; | |