浅谈Three.js源码-render之WebGLCapabilities.js
来源:互联网 发布:python股票预测算法 编辑:程序博客网 时间:2024/05/29 19:45
/** * @author mrdoob / http://mrdoob.com/ */function WebGLCapabilities( gl, extensions, parameters ) { var maxAnisotropy;//Anisotropy(各向异性)的最大值。 // 关于在纹理中 各向异性的使用请点这里:http://www.informit.com/articles/article.aspx?p=770639&seqNum=2 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 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 && !! extensions.get( 'EXT_frag_depth' ); //EXT_frag_depth也是一种扩展功能,它允许开发人员直接在片元着色器中直接指定深度值 /*example: <script type="x-shader/x-fragment"> void main() { gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0); gl_FragDepthEXT = 0.5; } </script> * */ var maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );//单个片段着色器能访问的纹理单元数,最低16,一般16或32 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 ); /* 1)gl_MaxVertexAttribs 指示支持的Vertex Attribute的最大值,其值最小为8。 2)gl_MaxVertexUniformVectors 指示Vertex Shader最多支持多少个vec4 uniform,其值最小为128。 3)gl_MaxVaryingVectors Vertex Shader最多可以输出多少个vec4变量,其值最小为8。 4)gl_MaxVertexTextureImageUnits Vertex Shader最多支持多少个纹理单元,其值最小为0,即不支持顶点纹理获取。 5)gl_MaxCombinedTextureImageUnits Vertex Shader和Fragment Shader总共最多支持多少个纹理单元,其值最小为8。 4. 精度限制 (Precision Qualifiers) 在Vertex Shader中,如果没有指定默认的精度,则float和int的精度为highp。 在Vertex Shader中,除color和lighting计算为mediump之外,其它的都为highp。*/ var vertexTextures = maxVertexTextures > 0; var floatFragmentTextures = !! extensions.get( 'OES_texture_float' ); //使用此扩展,纹理的RGBA值可以用32字节的浮点数表示, // 详情:https://developer.mozilla.org/zh-CN/docs/Web/API/OES_texture_float var floatVertexTextures = vertexTextures && floatFragmentTextures; return { 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 };}export { WebGLCapabilities };
阅读全文
0 0
- 浅谈Three.js源码-render之WebGLCapabilities.js
- 浅谈Three.js源码-render之WebGLAttributes.js
- 浅谈Three.js源码-render之WebGLBackground.js
- 浅谈Three.js源码-render之WebGLExtensions.js
- 浅谈Three.js源码-render之WebGLLights.js
- 浅谈Three.js源码-render之WebGLShader.js
- 浅谈Three.js源码-render之WebGLState.js(重要)
- 浅谈Three.js源码-render之SpritePlugin.js
- 浅谈Three.js源码-render之WebGLGeometries.js
- 浅谈three.js
- vue.js之render
- THREE.JS 源码注释
- three.js源码注释
- Webgl之three.js
- 前端之js-three
- 10、vue.js 之render
- Three.js源码阅读笔记
- js render
- sublime部分插件安装详解
- hadoop完全分布式集群安装
- [PAT-甲级]1036.Boys and Girls
- python 笔记
- 数组中出现次数超过一半的数字
- 浅谈Three.js源码-render之WebGLCapabilities.js
- Hadoop集群完全分布式模式环境部署
- InteliJ IDEA
- 迷茫的新人
- CodeForces
- Linux
- 数字在排序数组中出现的次数
- 最大子列和问题(分治思想)
- 搭建一个简单的Go Web服务器