您的位置:首页 > Web前端 > JavaScript

浅谈Three.js源码-render之WebGLExtensions.js

2017-07-03 17:20 806 查看
/**
* @author mrdoob / http://mrdoob.com/ */
//获取WebGL的扩展功能的脚本

/*WebGL 1.0对应的是OpenGL 2.0的标准,其中包括了各种扩展功能,得到对应扩展的API为
gl.getExtension( '扩展参数' );
扩展功能比较多,开发人员可以去  https://www.khronos.org/registry/webgl/extensions/ 进行查阅。
*/
function WebGLExtensions( gl ) {

var extensions = {};//用来存储多种扩展功能对象的对象

return {

get: function ( name ) {//获取对应扩展的方法

if ( extensions[ name ] !== undefined ) {//如果当前对象中已经有了对应拓展

return extensions[ name ];//直接将对应的功能进行返回

}

var extension;

switch ( name ) {//以下几种拓展是与浏览器的内核相关的,不同浏览器内核需要使用不同的参数进行使用。

/*相关拓展功能,笔者也有好多没有使用过,所以刚刚买了本OpenGL编程指南(第五版)对应OpenGL2.0标准,
回去研究一番。研究明白了,会以专题的形式更出来,不要说我偷懒QAQ。。。。*/

case 'WEBGL_depth_texture'://深度纹理
extension = gl.getExtension( 'WEBGL_depth_texture' ) ||
gl.getExtension( 'MOZ_WEBGL_depth_texture' ) ||
gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
break;

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;
/*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;

case 'WEBGL_compressed_texture_pvrtc':
extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) ||
gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
break;

case 'WEBGL_compressed_texture_etc1':
extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' );
break;

default:
extension = gl.getExtension( name );

}

9f3c
if ( extension === null ) {

console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );

}

extensions[ name ] = extension;

return extension;

}

};

}

export { WebGLExtensions };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WebGL 博客 threejs