Threejs 原始碼解析(WebGLExtension.js)
阿新 • • 發佈:2018-12-09
/** * @author mrdoob / http://mrdoob.com/ */ /** * WebGL 擴充套件 * @param gl webGL上下文物件 * @returns {{get: get}} * @constructor * 擴充套件詳見:https://www.khronos.org/registry/webgl/extensions/ */ function WebGLExtensions( gl ) { var extensions = {}; return { /** * 通過名稱獲取gl的物件值 * @param name * @returns {*} */ get: function ( name ) { if ( extensions[ name ] !== undefined ) { return extensions[ name ]; } var extension; /** * 以下幾種擴充套件是與瀏覽器的核心相關的,不同瀏覽器核心需要使用不同的引數進行使用 * OpenGl 的功能擴充套件到OpenGL ES 上,具體功能形式,要看OpenGL */ switch ( name ) { /** * 這個擴充套件了ANGLE_depth_texture的功能, */ case 'WEBGL_depth_texture'://深度紋理 extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); break; /** * 擴充套件了EXT_texture_filter_anisotropic功能;文件見:https://www.khronos.org/registry/webgl/extensions/EXT_texture_filter_anisotropic/ * */ case 'EXT_texture_filter_anisotropic'://anisotropic紋理過濾器 extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); break; /** * 文件見:https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/ */ /*s3tc、pvrtc、etc1都是壓縮紋理的不同標準*/ case 'WEBGL_compressed_texture_s3tc': extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); break; /** * 這個擴充套件了壓縮紋理格式中定義的IMG_texture_compression_pvrtc紋理壓縮,OpenGL擴充套件到WebGL */ case 'WEBGL_compressed_texture_pvrtc': extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); break; /** * 這個擴充套件了的壓縮紋理格式定義在OES_compressed_ETC1_RGB8_texture紋理壓縮OpenGL ES延伸到WebGL。 * 文件見:https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc1/ */ case 'WEBGL_compressed_texture_etc1': extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' ); break; /** * 否則,使用其它擴充套件 */ default: extension = gl.getExtension( name ); } if ( extension === null ) { console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); } extensions[ name ] = extension; return extension; } }; } export { WebGLExtensions };