setupRenderBufferStorage method

void setupRenderBufferStorage(
  1. Renderbuffer renderbuffer,
  2. RenderTarget renderTarget,
  3. bool isMultisample
)

Implementation

void setupRenderBufferStorage(Renderbuffer renderbuffer, RenderTarget renderTarget, bool isMultisample) {
		_gl.bindRenderbuffer( WebGL.RENDERBUFFER, renderbuffer );

		if ( renderTarget.depthBuffer ) {
			// retrieve the depth attachment types
			final depthTexture = renderTarget.depthTexture;
			final depthType = depthTexture != null && depthTexture.isDepthTexture ? depthTexture.type : null;
			final glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );
			final glAttachmentType = renderTarget.stencilBuffer ? WebGL.DEPTH_STENCIL_ATTACHMENT : WebGL.DEPTH_ATTACHMENT;

			// set up the attachment
			final samples = getRenderTargetSamples( renderTarget );
			final isUseMultisampledRTT = useMultisampledRTT( renderTarget );
			if ( isUseMultisampledRTT && multisampledRTTExt != null) {
				multisampledRTTExt.renderbufferStorageMultisampleEXT( WebGL.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
			}
    else if ( isMultisample ) {
				_gl.renderbufferStorageMultisample( WebGL.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
			} else {
				_gl.renderbufferStorage( WebGL.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
			}

			_gl.framebufferRenderbuffer( WebGL.FRAMEBUFFER, glAttachmentType, WebGL.RENDERBUFFER, renderbuffer );
		} else {
			final textures = renderTarget.textures;

			for (int i = 0; i < textures.length; i ++ ) {
				final texture = textures[ i ];

				final glFormat = utils.convert( texture.format, texture.colorSpace );
				final glType = utils.convert( texture.type );
				final glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
				final samples = getRenderTargetSamples( renderTarget );

				if ( isMultisample && useMultisampledRTT( renderTarget ) == false ) {
					_gl.renderbufferStorageMultisample( WebGL.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
				} else if ( useMultisampledRTT( renderTarget ) ) {
					multisampledRTTExt.renderbufferStorageMultisampleEXT( WebGL.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
				} else {
					_gl.renderbufferStorage( WebGL.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
				}
			}
		}

		_gl.bindRenderbuffer( WebGL.RENDERBUFFER, null );
}