/**
* @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 };
Threejs 源码解析(WebGLExtension.js)
最新推荐文章于 2024-06-01 09:57:38 发布