|
@@ -904,28 +904,37 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
|
|
|
if ( isMultisample ) {
|
|
|
|
|
|
- renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
|
|
|
- renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();
|
|
|
+ if ( capabilities.isWebGL2 ) {
|
|
|
|
|
|
- _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
|
- var glFormat = utils.convert( renderTarget.texture.format );
|
|
|
- var glType = utils.convert( renderTarget.texture.type );
|
|
|
- var glInternalFormat = getInternalFormat( glFormat, glType );
|
|
|
- var samples = getRenderTargetSamples( renderTarget );
|
|
|
- _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
+ renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
|
|
|
+ renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();
|
|
|
|
|
|
- _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
|
- _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
|
- _gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
|
+ _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
|
+ var glFormat = utils.convert( renderTarget.texture.format );
|
|
|
+ var glType = utils.convert( renderTarget.texture.type );
|
|
|
+ var glInternalFormat = getInternalFormat( glFormat, glType );
|
|
|
+ var samples = getRenderTargetSamples( renderTarget );
|
|
|
+ _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
|
|
|
|
|
|
- if ( renderTarget.depthBuffer ) {
|
|
|
+ _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
|
+ _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer );
|
|
|
+ _gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
|
|
|
|
|
|
- renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
|
- setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
|
+ if ( renderTarget.depthBuffer ) {
|
|
|
|
|
|
- }
|
|
|
+ renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
|
|
|
+ setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ _gl.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
|
|
|
- _gl.bindFramebuffer( _gl.FRAMEBUFFER, null );
|
|
|
+ console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1000,19 +1009,27 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils,
|
|
|
|
|
|
if ( renderTarget.isWebGLMultisampleRenderTarget ) {
|
|
|
|
|
|
- var renderTargetProperties = properties.get( renderTarget );
|
|
|
+ if ( capabilities.isWebGL2 ) {
|
|
|
+
|
|
|
+ var renderTargetProperties = properties.get( renderTarget );
|
|
|
+
|
|
|
+ _gl.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
|
+ _gl.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
|
|
|
|
- _gl.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
|
|
|
- _gl.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
|
|
|
+ var width = renderTarget.width;
|
|
|
+ var height = renderTarget.height;
|
|
|
+ var mask = _gl.COLOR_BUFFER_BIT;
|
|
|
|
|
|
- var width = renderTarget.width;
|
|
|
- var height = renderTarget.height;
|
|
|
- var mask = _gl.COLOR_BUFFER_BIT;
|
|
|
+ if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
|
+ if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
|
|
|
|
- if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
|
|
|
- if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
|
|
|
+ _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
|
|
|
|
- _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
|
|
|
+ } else {
|
|
|
+
|
|
|
+ console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|