setupRenderBufferStorage method
void
setupRenderBufferStorage(
- Renderbuffer renderbuffer,
- RenderTarget renderTarget,
- 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 );
}