Threejs 源码解析(WebGLExtension.js)

/**
 * @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 };
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值