Browse Source

Save isWebGL2 to WebGL context object

Takahiro 7 years ago
parent
commit
5219c0f120

+ 2 - 0
src/renderers/WebGLRenderer.js

@@ -211,6 +211,8 @@ function WebGLRenderer( parameters ) {
 
 
 		}
 		}
 
 
+		_gl.isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext;
+
 		// Some experimental-webgl implementations do not have getShaderPrecisionFormat
 		// Some experimental-webgl implementations do not have getShaderPrecisionFormat
 
 
 		if ( _gl.getShaderPrecisionFormat === undefined ) {
 		if ( _gl.getShaderPrecisionFormat === undefined ) {

+ 2 - 4
src/renderers/webgl/WebGLBufferRenderer.js

@@ -4,8 +4,6 @@
 
 
 function WebGLBufferRenderer( gl, extensions, info ) {
 function WebGLBufferRenderer( gl, extensions, info ) {
 
 
-	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
-
 	var mode;
 	var mode;
 
 
 	function setMode( value ) {
 	function setMode( value ) {
@@ -39,11 +37,11 @@ function WebGLBufferRenderer( gl, extensions, info ) {
 
 
 			count = position.data.count;
 			count = position.data.count;
 
 
-			extension[ isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, 0, count, geometry.maxInstancedCount );
+			extension[ gl.isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, 0, count, geometry.maxInstancedCount );
 
 
 		} else {
 		} else {
 
 
-			extension[ isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, start, count, geometry.maxInstancedCount );
+			extension[ gl.isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, start, count, geometry.maxInstancedCount );
 
 
 		}
 		}
 
 

+ 2 - 4
src/renderers/webgl/WebGLExtensions.js

@@ -6,8 +6,6 @@ function WebGLExtensions( gl ) {
 
 
 	var extensions = {};
 	var extensions = {};
 
 
-	var isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext );
-
 	return {
 	return {
 
 
 		get: function ( name ) {
 		get: function ( name ) {
@@ -24,7 +22,7 @@ function WebGLExtensions( gl ) {
 
 
 				case 'WEBGL_depth_texture':
 				case 'WEBGL_depth_texture':
 
 
-					if ( isWebGL2 ) {
+					if ( gl.isWebGL2 ) {
 
 
 						extension = gl;
 						extension = gl;
 
 
@@ -54,7 +52,7 @@ function WebGLExtensions( gl ) {
 
 
 				default:
 				default:
 
 
-					if ( isWebGL2 &&
+					if ( gl.isWebGL2 &&
 						[ 'ANGLE_instanced_arrays',
 						[ 'ANGLE_instanced_arrays',
 						  'OES_texture_float',
 						  'OES_texture_float',
 						  'OES_texture_half_float',
 						  'OES_texture_half_float',

+ 1 - 3
src/renderers/webgl/WebGLIndexedBufferRenderer.js

@@ -4,8 +4,6 @@
 
 
 function WebGLIndexedBufferRenderer( gl, extensions, info ) {
 function WebGLIndexedBufferRenderer( gl, extensions, info ) {
 
 
-	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
-
 	var mode;
 	var mode;
 
 
 	function setMode( value ) {
 	function setMode( value ) {
@@ -42,7 +40,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
 
 
 		}
 		}
 
 
-		extension[ isWebGL2 ? 'drawElementsInstanced' : 'drawElementsInstancedANGLE' ]( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
+		extension[ gl.isWebGL2 ? 'drawElementsInstanced' : 'drawElementsInstancedANGLE' ]( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
 
 
 		info.update( count, mode, geometry.maxInstancedCount );
 		info.update( count, mode, geometry.maxInstancedCount );
 
 

+ 2 - 4
src/renderers/webgl/WebGLProgram.js

@@ -206,8 +206,6 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 
 
 	var gl = renderer.context;
 	var gl = renderer.context;
 
 
-	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
-
 	var defines = material.defines;
 	var defines = material.defines;
 
 
 	var vertexShader = shader.vertexShader;
 	var vertexShader = shader.vertexShader;
@@ -287,7 +285,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 
 
 	//
 	//
 
 
-	var customExtensions = isWebGL2 ? '' : generateExtensions( material.extensions, parameters, extensions );
+	var customExtensions = gl.isWebGL2 ? '' : generateExtensions( material.extensions, parameters, extensions );
 
 
 	var customDefines = generateDefines( defines );
 	var customDefines = generateDefines( defines );
 
 
@@ -516,7 +514,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 	vertexShader = unrollLoops( vertexShader );
 	vertexShader = unrollLoops( vertexShader );
 	fragmentShader = unrollLoops( fragmentShader );
 	fragmentShader = unrollLoops( fragmentShader );
 
 
-	if ( isWebGL2 && ! material.isRawShaderMaterial ) {
+	if ( gl.isWebGL2 && ! material.isRawShaderMaterial ) {
 
 
 		var isGLSL3ShaderMaterial = material.isShaderMaterial && material.isGLSL3;
 		var isGLSL3ShaderMaterial = material.isShaderMaterial && material.isGLSL3;
 
 

+ 2 - 4
src/renderers/webgl/WebGLState.js

@@ -7,8 +7,6 @@ import { Vector4 } from '../../math/Vector4.js';
 
 
 function WebGLState( gl, extensions, utils ) {
 function WebGLState( gl, extensions, utils ) {
 
 
-	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
-
 	function ColorBuffer() {
 	function ColorBuffer() {
 
 
 		var locked = false;
 		var locked = false;
@@ -432,7 +430,7 @@ function WebGLState( gl, extensions, utils ) {
 
 
 			var extension = extensions.get( 'ANGLE_instanced_arrays' );
 			var extension = extensions.get( 'ANGLE_instanced_arrays' );
 
 
-			extension[ isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, 0 );
+			extension[ gl.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, 0 );
 			attributeDivisors[ attribute ] = 0;
 			attributeDivisors[ attribute ] = 0;
 
 
 		}
 		}
@@ -454,7 +452,7 @@ function WebGLState( gl, extensions, utils ) {
 
 
 			var extension = extensions.get( 'ANGLE_instanced_arrays' );
 			var extension = extensions.get( 'ANGLE_instanced_arrays' );
 
 
-			extension[ isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
+			extension[ gl.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
 			attributeDivisors[ attribute ] = meshPerAttribute;
 			attributeDivisors[ attribute ] = meshPerAttribute;
 
 
 		}
 		}

+ 5 - 6
src/renderers/webgl/WebGLTextures.js

@@ -7,7 +7,6 @@ import { _Math } from '../../math/Math.js';
 
 
 function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
 function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
 
 
-	var _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */
 	var _videoTextures = {};
 	var _videoTextures = {};
 	var _canvas;
 	var _canvas;
 
 
@@ -76,7 +75,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	function textureNeedsPowerOfTwo( texture ) {
 	function textureNeedsPowerOfTwo( texture ) {
 
 
-		if ( _isWebGL2 ) return false;
+		if ( _gl.isWebGL2 ) return false;
 
 
 		return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||
 		return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||
 			( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );
 			( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );
@@ -101,7 +100,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 	function getInternalFormat( glFormat, glType ) {
 	function getInternalFormat( glFormat, glType ) {
 
 
-		if ( ! _isWebGL2 ) return glFormat;
+		if ( ! _gl.isWebGL2 ) return glFormat;
 
 
 		if ( glFormat === _gl.RGB ) {
 		if ( glFormat === _gl.RGB ) {
 
 
@@ -505,10 +504,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 
 
 			if ( texture.type === FloatType ) {
 			if ( texture.type === FloatType ) {
 
 
-				if ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );
+				if ( ! _gl.isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );
 				glInternalFormat = _gl.DEPTH_COMPONENT32F;
 				glInternalFormat = _gl.DEPTH_COMPONENT32F;
 
 
-			} else if ( _isWebGL2 ) {
+			} else if ( _gl.isWebGL2 ) {
 
 
 				// WebGL 2.0 requires signed internalformat for glTexImage2D
 				// WebGL 2.0 requires signed internalformat for glTexImage2D
 				glInternalFormat = _gl.DEPTH_COMPONENT16;
 				glInternalFormat = _gl.DEPTH_COMPONENT16;
@@ -655,7 +654,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
 		var glFormat = utils.convert( renderTarget.texture.format );
 		var glFormat = utils.convert( renderTarget.texture.format );
 		var glType = utils.convert( renderTarget.texture.type );
 		var glType = utils.convert( renderTarget.texture.type );
 		var glInternalFormat = getInternalFormat( glFormat, glType );
 		var glInternalFormat = getInternalFormat( glFormat, glType );
-		var array = ( _isWebGL2 ) ? new Uint8Array( renderTarget.width * renderTarget.height * 4 ) : null;
+		var array = ( _gl.isWebGL2 ) ? new Uint8Array( renderTarget.width * renderTarget.height * 4 ) : null;
 		state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, array );
 		state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, array );
 		_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
 		_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
 		_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );
 		_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );

+ 3 - 5
src/renderers/webgl/WebGLUtils.js

@@ -6,8 +6,6 @@ import { MaxEquation, MinEquation, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, R
 
 
 function WebGLUtils( gl, extensions ) {
 function WebGLUtils( gl, extensions ) {
 
 
-	var isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext );
-
 	function convert( p ) {
 	function convert( p ) {
 
 
 		var extension;
 		var extension;
@@ -38,7 +36,7 @@ function WebGLUtils( gl, extensions ) {
 
 
 		if ( p === HalfFloatType ) {
 		if ( p === HalfFloatType ) {
 
 
-			if ( isWebGL2 ) return gl.HALF_FLOAT;
+			if ( gl.isWebGL2 ) return gl.HALF_FLOAT;
 
 
 			extension = extensions.get( 'OES_texture_half_float' );
 			extension = extensions.get( 'OES_texture_half_float' );
 
 
@@ -129,7 +127,7 @@ function WebGLUtils( gl, extensions ) {
 
 
 		if ( p === MinEquation || p === MaxEquation ) {
 		if ( p === MinEquation || p === MaxEquation ) {
 
 
-			if ( isWebGL2 ) {
+			if ( gl.isWebGL2 ) {
 
 
 				if ( p === MinEquation ) return gl.MIN;
 				if ( p === MinEquation ) return gl.MIN;
 				if ( p === MaxEquation ) return gl.MAX;
 				if ( p === MaxEquation ) return gl.MAX;
@@ -149,7 +147,7 @@ function WebGLUtils( gl, extensions ) {
 
 
 		if ( p === UnsignedInt248Type ) {
 		if ( p === UnsignedInt248Type ) {
 
 
-			if ( isWebGL2 ) return gl.UNSIGNED_INT_24_8;
+			if ( gl.isWebGL2 ) return gl.UNSIGNED_INT_24_8;
 
 
 			extension = extensions.get( 'WEBGL_depth_texture' );
 			extension = extensions.get( 'WEBGL_depth_texture' );