|
@@ -19,15 +19,12 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
pixelRatio = 1,
|
|
pixelRatio = 1,
|
|
|
|
|
|
- _precision = parameters.precision !== undefined ? parameters.precision : 'highp',
|
|
|
|
-
|
|
|
|
_alpha = parameters.alpha !== undefined ? parameters.alpha : false,
|
|
_alpha = parameters.alpha !== undefined ? parameters.alpha : false,
|
|
_depth = parameters.depth !== undefined ? parameters.depth : true,
|
|
_depth = parameters.depth !== undefined ? parameters.depth : true,
|
|
_stencil = parameters.stencil !== undefined ? parameters.stencil : true,
|
|
_stencil = parameters.stencil !== undefined ? parameters.stencil : true,
|
|
_antialias = parameters.antialias !== undefined ? parameters.antialias : false,
|
|
_antialias = parameters.antialias !== undefined ? parameters.antialias : false,
|
|
_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,
|
|
_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,
|
|
_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,
|
|
_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,
|
|
- _logarithmicDepthBuffer = parameters.logarithmicDepthBuffer !== undefined ? parameters.logarithmicDepthBuffer : false,
|
|
|
|
|
|
|
|
_clearColor = new THREE.Color( 0x000000 ),
|
|
_clearColor = new THREE.Color( 0x000000 ),
|
|
_clearAlpha = 0;
|
|
_clearAlpha = 0;
|
|
@@ -197,7 +194,10 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
}
|
|
}
|
|
|
|
|
|
var extensions = new THREE.WebGLExtensions( _gl );
|
|
var extensions = new THREE.WebGLExtensions( _gl );
|
|
-
|
|
|
|
|
|
+ var capabilities = new THREE.WebGLCapabilities(_gl, extensions, parameters )
|
|
|
|
+
|
|
|
|
+ this.capabilities = capabilities;
|
|
|
|
+
|
|
extensions.get( 'OES_texture_float' );
|
|
extensions.get( 'OES_texture_float' );
|
|
extensions.get( 'OES_texture_float_linear' );
|
|
extensions.get( 'OES_texture_float_linear' );
|
|
extensions.get( 'OES_texture_half_float' );
|
|
extensions.get( 'OES_texture_half_float' );
|
|
@@ -210,13 +210,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
THREE.BufferGeometry.MaxIndex = 4294967296;
|
|
THREE.BufferGeometry.MaxIndex = 4294967296;
|
|
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
- if ( _logarithmicDepthBuffer ) {
|
|
|
|
-
|
|
|
|
- extensions.get( 'EXT_frag_depth' );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+
|
|
var state = new THREE.WebGLState( _gl, extensions, paramThreeToGL );
|
|
var state = new THREE.WebGLState( _gl, extensions, paramThreeToGL );
|
|
var properties = new THREE.WebGLProperties();
|
|
var properties = new THREE.WebGLProperties();
|
|
var objects = new THREE.WebGLObjects( _gl, properties, this.info );
|
|
var objects = new THREE.WebGLObjects( _gl, properties, this.info );
|
|
@@ -274,24 +268,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
this.shadowMap = shadowMap;
|
|
this.shadowMap = shadowMap;
|
|
|
|
|
|
- // GPU capabilities
|
|
|
|
-
|
|
|
|
- var _maxTextures = _gl.getParameter( _gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
|
|
- var _maxVertexTextures = _gl.getParameter( _gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
|
|
|
|
- var _maxTextureSize = _gl.getParameter( _gl.MAX_TEXTURE_SIZE );
|
|
|
|
- var _maxCubemapSize = _gl.getParameter( _gl.MAX_CUBE_MAP_TEXTURE_SIZE );
|
|
|
|
-
|
|
|
|
- var _supportsVertexTextures = _maxVertexTextures > 0;
|
|
|
|
- var _supportsBoneTextures = _supportsVertexTextures && extensions.get( 'OES_texture_float' );
|
|
|
|
-
|
|
|
|
- var _maxPrecision = state.getMaxPrecision( _precision );
|
|
|
|
-
|
|
|
|
- if ( _maxPrecision !== _precision ) {
|
|
|
|
-
|
|
|
|
- console.warn( 'THREE.WebGLRenderer:', _precision, 'not supported, using', _maxPrecision, 'instead.' );
|
|
|
|
- _precision = _maxPrecision;
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
|
|
// Plugins
|
|
// Plugins
|
|
|
|
|
|
@@ -346,7 +322,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
this.getPrecision = function () {
|
|
this.getPrecision = function () {
|
|
|
|
|
|
- return _precision;
|
|
|
|
|
|
+ return capabilities.precision;
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1485,11 +1461,11 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
var maxLightCount = allocateLights( lights );
|
|
var maxLightCount = allocateLights( lights );
|
|
var maxShadows = allocateShadows( lights );
|
|
var maxShadows = allocateShadows( lights );
|
|
var maxBones = allocateBones( object );
|
|
var maxBones = allocateBones( object );
|
|
- var precision = _precision;
|
|
|
|
|
|
+ var precision = capabilities.precision;
|
|
|
|
|
|
if ( material.precision !== null ) {
|
|
if ( material.precision !== null ) {
|
|
|
|
|
|
- precision = state.getMaxPrecision( material.precision );
|
|
|
|
|
|
+ precision = capabilities.getMaxPrecision( material.precision );
|
|
|
|
|
|
if ( precision !== material.precision ) {
|
|
if ( precision !== material.precision ) {
|
|
|
|
|
|
@@ -1502,7 +1478,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
var parameters = {
|
|
var parameters = {
|
|
|
|
|
|
precision: precision,
|
|
precision: precision,
|
|
- supportsVertexTextures: _supportsVertexTextures,
|
|
|
|
|
|
+ supportsVertexTextures: capabilities.vertexTextures,
|
|
|
|
|
|
map: !! material.map,
|
|
map: !! material.map,
|
|
envMap: !! material.envMap,
|
|
envMap: !! material.envMap,
|
|
@@ -1526,11 +1502,11 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
flatShading: material.shading === THREE.FlatShading,
|
|
flatShading: material.shading === THREE.FlatShading,
|
|
|
|
|
|
sizeAttenuation: material.sizeAttenuation,
|
|
sizeAttenuation: material.sizeAttenuation,
|
|
- logarithmicDepthBuffer: _logarithmicDepthBuffer,
|
|
|
|
|
|
+ logarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,
|
|
|
|
|
|
skinning: material.skinning,
|
|
skinning: material.skinning,
|
|
maxBones: maxBones,
|
|
maxBones: maxBones,
|
|
- useVertexTexture: _supportsBoneTextures && object && object.skeleton && object.skeleton.useVertexTexture,
|
|
|
|
|
|
+ useVertexTexture: capabilities.floatVertexTextures && object && object.skeleton && object.skeleton.useVertexTexture,
|
|
|
|
|
|
morphTargets: material.morphTargets,
|
|
morphTargets: material.morphTargets,
|
|
morphNormals: material.morphNormals,
|
|
morphNormals: material.morphNormals,
|
|
@@ -1797,7 +1773,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
_gl.uniformMatrix4fv( p_uniforms.projectionMatrix, false, camera.projectionMatrix.elements );
|
|
_gl.uniformMatrix4fv( p_uniforms.projectionMatrix, false, camera.projectionMatrix.elements );
|
|
|
|
|
|
- if ( _logarithmicDepthBuffer ) {
|
|
|
|
|
|
+ if ( capabilities.logarithmicDepthBuffer ) {
|
|
|
|
|
|
_gl.uniform1f( p_uniforms.logDepthBufFC, 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
|
|
_gl.uniform1f( p_uniforms.logDepthBufFC, 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
|
|
|
|
|
|
@@ -1856,7 +1832,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( _supportsBoneTextures && object.skeleton && object.skeleton.useVertexTexture ) {
|
|
|
|
|
|
+ if ( capabilities.floatVertexTextures && object.skeleton && object.skeleton.useVertexTexture ) {
|
|
|
|
|
|
if ( p_uniforms.boneTexture !== undefined ) {
|
|
if ( p_uniforms.boneTexture !== undefined ) {
|
|
|
|
|
|
@@ -2262,9 +2238,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
var textureUnit = _usedTextureUnits;
|
|
var textureUnit = _usedTextureUnits;
|
|
|
|
|
|
- if ( textureUnit >= _maxTextures ) {
|
|
|
|
|
|
+ if ( textureUnit >= capabilities.maxTextures ) {
|
|
|
|
|
|
- console.warn( 'WebGLRenderer: trying to use ' + textureUnit + ' texture units while this GPU supports only ' + _maxTextures );
|
|
|
|
|
|
+ console.warn( 'WebGLRenderer: trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2919,7 +2895,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
|
|
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
|
|
|
|
|
|
- texture.image = clampToMaxSize( texture.image, _maxTextureSize );
|
|
|
|
|
|
+ texture.image = clampToMaxSize( texture.image, capabilities.maxTextureSize );
|
|
|
|
|
|
var image = texture.image,
|
|
var image = texture.image,
|
|
isImagePowerOfTwo = THREE.Math.isPowerOfTwo( image.width ) && THREE.Math.isPowerOfTwo( image.height ),
|
|
isImagePowerOfTwo = THREE.Math.isPowerOfTwo( image.width ) && THREE.Math.isPowerOfTwo( image.height ),
|
|
@@ -3104,7 +3080,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
if ( _this.autoScaleCubemaps && ! isCompressed && ! isDataTexture ) {
|
|
if ( _this.autoScaleCubemaps && ! isCompressed && ! isDataTexture ) {
|
|
|
|
|
|
- cubeImage[ i ] = clampToMaxSize( texture.image[ i ], _maxCubemapSize );
|
|
|
|
|
|
+ cubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
|
|
|
@@ -3567,7 +3543,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
function allocateBones ( object ) {
|
|
function allocateBones ( object ) {
|
|
|
|
|
|
- if ( _supportsBoneTextures && object && object.skeleton && object.skeleton.useVertexTexture ) {
|
|
|
|
|
|
+ if ( capabilities.floatVertexTextures && object && object.skeleton && object.skeleton.useVertexTexture ) {
|
|
|
|
|
|
return 1024;
|
|
return 1024;
|
|
|
|
|
|
@@ -3692,7 +3668,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
this.supportsVertexTextures = function () {
|
|
this.supportsVertexTextures = function () {
|
|
|
|
|
|
- return _supportsVertexTextures;
|
|
|
|
|
|
+ return capabilities.vertexTextures;
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|