setupDepthRenderbuffer method

void setupDepthRenderbuffer(
  1. RenderTarget renderTarget
)

Implementation

void setupDepthRenderbuffer(RenderTarget renderTarget) {
		final renderTargetProperties = properties.get( renderTarget );
		final isCube = ( renderTarget is WebGLCubeRenderTarget == true );

		// if the bound depth texture has changed
		if ( renderTargetProperties['__boundDepthTexture'] != renderTarget.depthTexture ) {
			// fire the dispose event to get rid of stored state associated with the previously bound depth buffer
			final depthTexture = renderTarget.depthTexture;
			if ( renderTargetProperties['__depthDisposeCallback'] ) {
				renderTargetProperties['__depthDisposeCallback']();
			}

			// set up dispose listeners to track when the currently attached buffer is implicitly unbound
			if ( depthTexture != null) {
				disposeEvent(){
					renderTargetProperties.remove('__boundDepthTexture');//delete renderTargetProperties.__boundDepthTexture;
					renderTargetProperties.remove('__depthDisposeCallback');//delete renderTargetProperties.__depthDisposeCallback;
					depthTexture.removeEventListener( 'dispose', disposeEvent );
				}
				depthTexture.addEventListener( 'dispose', disposeEvent );
				renderTargetProperties['__depthDisposeCallback'] = disposeEvent;
			}
			renderTargetProperties['__boundDepthTexture'] = depthTexture;
		}

		if ( renderTarget.depthTexture != null && !renderTargetProperties['__autoAllocateDepthBuffer'] ) {
			if ( isCube ) throw( 'target.depthTexture not supported in Cube render targets' );
			setupDepthTexture( renderTargetProperties['__webglFramebuffer'], renderTarget );
		} else {
			if (isCube) {
				renderTargetProperties['__webglDepthbuffer'] = [];

				for (int i = 0; i < 6; i++) {
					state.bindFramebuffer( WebGL.FRAMEBUFFER, renderTargetProperties['__webglFramebuffer'][ i ] );

					if (renderTargetProperties['__webglDepthbuffer'].length <= i || renderTargetProperties['__webglDepthbuffer'][ i ] == null ) {
						(renderTargetProperties['__webglDepthbuffer'] as List).listSetter(i,_gl.createRenderbuffer());// [ i ] = _gl.createRenderbuffer();
						setupRenderBufferStorage( renderTargetProperties['__webglDepthbuffer'][ i ], renderTarget, false );
					} else {
						// attach buffer if it's been created already
						final glAttachmentType = renderTarget.stencilBuffer ? WebGL.DEPTH_STENCIL_ATTACHMENT : WebGL.DEPTH_ATTACHMENT;
						final renderbuffer = renderTargetProperties['__webglDepthbuffer'][ i ];
						_gl.bindRenderbuffer( WebGL.RENDERBUFFER, renderbuffer );
						_gl.framebufferRenderbuffer( WebGL.FRAMEBUFFER, glAttachmentType, WebGL.RENDERBUFFER, renderbuffer );
					}
				}
			} else {
				state.bindFramebuffer( WebGL.FRAMEBUFFER, renderTargetProperties['__webglFramebuffer'] );

				if ( renderTargetProperties['__webglDepthbuffer'] == null ) {
					renderTargetProperties['__webglDepthbuffer'] = _gl.createRenderbuffer();
					setupRenderBufferStorage( renderTargetProperties['__webglDepthbuffer'], renderTarget, false );
				} else {
					// attach buffer if it's been created already
					final glAttachmentType = renderTarget.stencilBuffer ? WebGL.DEPTH_STENCIL_ATTACHMENT : WebGL.DEPTH_ATTACHMENT;
					final renderbuffer = renderTargetProperties['__webglDepthbuffer'];
					_gl.bindRenderbuffer( WebGL.RENDERBUFFER, renderbuffer );
					_gl.framebufferRenderbuffer( WebGL.FRAMEBUFFER, glAttachmentType, WebGL.RENDERBUFFER, renderbuffer );
				}
			}
		}

		state.bindFramebuffer( WebGL.FRAMEBUFFER, null );
}