|
@@ -9254,7 +9254,7 @@
|
|
|
if ( _lightShadows.length === 0 ) return;
|
|
|
|
|
|
// Set GL state for depth map.
|
|
|
- _state.clearColor( 1, 1, 1, 1 );
|
|
|
+ _state.buffers.color.setClear( 1, 1, 1, 1 );
|
|
|
_state.disable( _gl.BLEND );
|
|
|
_state.setDepthTest( true );
|
|
|
_state.setScissorTest( false );
|
|
@@ -18208,7 +18208,13 @@
|
|
|
|
|
|
},
|
|
|
|
|
|
- setClear: function ( r, g, b, a ) {
|
|
|
+ setClear: function ( r, g, b, a, premultipliedAlpha ) {
|
|
|
+
|
|
|
+ if ( premultipliedAlpha === true ) {
|
|
|
+
|
|
|
+ r *= a; g *= a; b *= a;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
color.set( r, g, b, a );
|
|
|
|
|
@@ -18543,9 +18549,9 @@
|
|
|
|
|
|
function init() {
|
|
|
|
|
|
- clearColor( 0, 0, 0, 1 );
|
|
|
- clearDepth( 1 );
|
|
|
- clearStencil( 0 );
|
|
|
+ colorBuffer.setClear( 0, 0, 0, 1 );
|
|
|
+ depthBuffer.setClear( 1 );
|
|
|
+ stencilBuffer.setClear( 0 );
|
|
|
|
|
|
enable( gl.DEPTH_TEST );
|
|
|
setDepthFunc( LessEqualDepth );
|
|
@@ -19024,26 +19030,6 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- // TODO Deprecate
|
|
|
-
|
|
|
- function clearColor( r, g, b, a ) {
|
|
|
-
|
|
|
- colorBuffer.setClear( r, g, b, a );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- function clearDepth( depth ) {
|
|
|
-
|
|
|
- depthBuffer.setClear( depth );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- function clearStencil( stencil ) {
|
|
|
-
|
|
|
- stencilBuffer.setClear( stencil );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
//
|
|
|
|
|
|
function scissor( scissor ) {
|
|
@@ -19143,10 +19129,6 @@
|
|
|
compressedTexImage2D: compressedTexImage2D,
|
|
|
texImage2D: texImage2D,
|
|
|
|
|
|
- clearColor: clearColor,
|
|
|
- clearDepth: clearDepth,
|
|
|
- clearStencil: clearStencil,
|
|
|
-
|
|
|
scissor: scissor,
|
|
|
viewport: viewport,
|
|
|
|
|
@@ -19780,18 +19762,6 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- function glClearColor( r, g, b, a ) {
|
|
|
-
|
|
|
- if ( _premultipliedAlpha === true ) {
|
|
|
-
|
|
|
- r *= a; g *= a; b *= a;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- state.clearColor( r, g, b, a );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
function setDefaultGLState() {
|
|
|
|
|
|
state.init();
|
|
@@ -19799,7 +19769,7 @@
|
|
|
state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );
|
|
|
state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );
|
|
|
|
|
|
- glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
|
|
|
+ state.buffers.color.setClear( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha, _premultipliedAlpha );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -19943,7 +19913,7 @@
|
|
|
|
|
|
_clearAlpha = alpha !== undefined ? alpha : 1;
|
|
|
|
|
|
- glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
|
|
|
+ state.buffers.color.setClear( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha, _premultipliedAlpha );
|
|
|
|
|
|
};
|
|
|
|
|
@@ -19957,7 +19927,7 @@
|
|
|
|
|
|
_clearAlpha = alpha;
|
|
|
|
|
|
- glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
|
|
|
+ state.buffers.color.setClear( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha, _premultipliedAlpha );
|
|
|
|
|
|
};
|
|
|
|
|
@@ -20667,11 +20637,11 @@
|
|
|
|
|
|
if ( background === null ) {
|
|
|
|
|
|
- glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
|
|
|
+ state.buffers.color.setClear( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha, _premultipliedAlpha );
|
|
|
|
|
|
} else if ( background && background.isColor ) {
|
|
|
|
|
|
- glClearColor( background.r, background.g, background.b, 1 );
|
|
|
+ state.buffers.color.setClear( background.r, background.g, background.b, 1, _premultipliedAlpha );
|
|
|
forceClear = true;
|
|
|
|
|
|
}
|
|
@@ -21200,7 +21170,7 @@
|
|
|
material.needsUpdate = true;
|
|
|
|
|
|
} else if ( materialProperties.numClippingPlanes !== undefined &&
|
|
|
- ( materialProperties.numClippingPlanes !== _clipping.numPlanes ||
|
|
|
+ ( materialProperties.numClippingPlanes !== _clipping.numPlanes ||
|
|
|
materialProperties.numIntersection !== _clipping.numIntersection ) ) {
|
|
|
|
|
|
material.needsUpdate = true;
|
|
@@ -22295,6 +22265,184 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @author mrdoob / http://mrdoob.com/
|
|
|
+ */
|
|
|
+
|
|
|
+ function WebGL2Renderer( parameters ) {
|
|
|
+
|
|
|
+ console.log( 'THREE.WebGL2Renderer', REVISION );
|
|
|
+
|
|
|
+ parameters = parameters || {};
|
|
|
+
|
|
|
+ var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),
|
|
|
+ _context = parameters.context !== undefined ? parameters.context : null,
|
|
|
+
|
|
|
+ _alpha = parameters.alpha !== undefined ? parameters.alpha : false,
|
|
|
+ _depth = parameters.depth !== undefined ? parameters.depth : true,
|
|
|
+ _stencil = parameters.stencil !== undefined ? parameters.stencil : true,
|
|
|
+ _antialias = parameters.antialias !== undefined ? parameters.antialias : false,
|
|
|
+ _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,
|
|
|
+ _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false;
|
|
|
+
|
|
|
+ // initialize
|
|
|
+
|
|
|
+ var gl;
|
|
|
+
|
|
|
+ try {
|
|
|
+
|
|
|
+ var attributes = {
|
|
|
+ alpha: _alpha,
|
|
|
+ depth: _depth,
|
|
|
+ stencil: _stencil,
|
|
|
+ antialias: _antialias,
|
|
|
+ premultipliedAlpha: _premultipliedAlpha,
|
|
|
+ preserveDrawingBuffer: _preserveDrawingBuffer
|
|
|
+ };
|
|
|
+
|
|
|
+ gl = _context || _canvas.getContext( 'webgl2', attributes );
|
|
|
+
|
|
|
+ if ( gl === null ) {
|
|
|
+
|
|
|
+ if ( _canvas.getContext( 'webgl2' ) !== null ) {
|
|
|
+
|
|
|
+ throw 'Error creating WebGL2 context with your selected attributes.';
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ throw 'Error creating WebGL2 context.';
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ _canvas.addEventListener( 'webglcontextlost', onContextLost, false );
|
|
|
+
|
|
|
+ } catch ( error ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.WebGL2Renderer: ' + error );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ var _this = this,
|
|
|
+
|
|
|
+ _autoClear = true,
|
|
|
+ _autoClearColor = true,
|
|
|
+ _autoClearDepth = true,
|
|
|
+ _autoClearStencil = true,
|
|
|
+
|
|
|
+ _clearColor = new Color( 0x000000 ),
|
|
|
+ _clearAlpha = 0,
|
|
|
+
|
|
|
+ _width = _canvas.width,
|
|
|
+ _height = _canvas.height,
|
|
|
+
|
|
|
+ _pixelRatio = 1,
|
|
|
+
|
|
|
+ _viewport = new Vector4( 0, 0, _width, _height );
|
|
|
+
|
|
|
+ var extensions = new WebGLExtensions( gl );
|
|
|
+ var state = new WebGLState( gl, extensions, function () {} );
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ function clear( color, depth, stencil ) {
|
|
|
+
|
|
|
+ var bits = 0;
|
|
|
+
|
|
|
+ if ( color === undefined || color ) bits |= gl.COLOR_BUFFER_BIT;
|
|
|
+ if ( depth === undefined || depth ) bits |= gl.DEPTH_BUFFER_BIT;
|
|
|
+ if ( stencil === undefined || stencil ) bits |= gl.STENCIL_BUFFER_BIT;
|
|
|
+
|
|
|
+ gl.clear( bits );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function setPixelRatio( value ) {
|
|
|
+
|
|
|
+ if ( value === undefined ) return;
|
|
|
+
|
|
|
+ _pixelRatio = value;
|
|
|
+
|
|
|
+ setSize( _viewport.z, _viewport.w, false );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function setSize( width, height, updateStyle ) {
|
|
|
+
|
|
|
+ _width = width;
|
|
|
+ _height = height;
|
|
|
+
|
|
|
+ _canvas.width = width * _pixelRatio;
|
|
|
+ _canvas.height = height * _pixelRatio;
|
|
|
+
|
|
|
+ if ( updateStyle !== false ) {
|
|
|
+
|
|
|
+ _canvas.style.width = width + 'px';
|
|
|
+ _canvas.style.height = height + 'px';
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ setViewport( 0, 0, width, height );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function setViewport( x, y, width, height ) {
|
|
|
+
|
|
|
+ state.viewport( _viewport.set( x, y, width, height ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function render( scene, camera ) {
|
|
|
+
|
|
|
+ if ( camera !== undefined && camera.isCamera !== true ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.WebGL2Renderer.render: camera is not an instance of THREE.Camera.' );
|
|
|
+ return;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ var background = scene.background;
|
|
|
+ var forceClear = false;
|
|
|
+
|
|
|
+ if ( background === null ) {
|
|
|
+
|
|
|
+ state.buffers.color.setClear( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha, _premultipliedAlpha );
|
|
|
+
|
|
|
+ } else if ( background && background.isColor ) {
|
|
|
+
|
|
|
+ state.buffers.color.setClear( background.r, background.g, background.b, 1, _premultipliedAlpha );
|
|
|
+ forceClear = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( _autoClear || forceClear ) {
|
|
|
+
|
|
|
+ this.clear( _autoClearColor, _autoClearDepth, _autoClearStencil );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function onContextLost( event ) {
|
|
|
+
|
|
|
+ event.preventDefault();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ domElement: _canvas,
|
|
|
+
|
|
|
+ clear: clear,
|
|
|
+ setPixelRatio: setPixelRatio,
|
|
|
+ setSize: setSize,
|
|
|
+ render: render
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @author mrdoob / http://mrdoob.com/
|
|
|
* @author alteredq / http://alteredqualia.com/
|
|
@@ -41936,6 +42084,7 @@
|
|
|
exports.WebGLRenderTargetCube = WebGLRenderTargetCube;
|
|
|
exports.WebGLRenderTarget = WebGLRenderTarget;
|
|
|
exports.WebGLRenderer = WebGLRenderer;
|
|
|
+ exports.WebGL2Renderer = WebGL2Renderer;
|
|
|
exports.ShaderLib = ShaderLib;
|
|
|
exports.UniformsLib = UniformsLib;
|
|
|
exports.UniformsUtils = UniformsUtils;
|