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 }; | |