setupRenderBufferStorage method
void
setupRenderBufferStorage(
- dynamic renderbuffer,
- RenderTarget renderTarget,
- bool isMultisample
Implementation
void setupRenderBufferStorage(
renderbuffer, RenderTarget renderTarget, bool isMultisample) {
gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
if (renderTarget.depthBuffer && !renderTarget.stencilBuffer) {
var glInternalFormat = gl.DEPTH_COMPONENT16;
if (isMultisample || useMultisampledRenderToTexture(renderTarget)) {
var depthTexture = renderTarget.depthTexture;
if (depthTexture != null && depthTexture is DepthTexture) {
if (depthTexture.type == FloatType) {
glInternalFormat = gl.DEPTH_COMPONENT32F;
} else if (depthTexture.type == UnsignedIntType) {
glInternalFormat = gl.DEPTH_COMPONENT24;
}
}
var samples = getRenderTargetSamples(renderTarget);
// gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples,
// glInternalFormat, renderTarget.width, renderTarget.height);
if (useMultisampledRenderToTexture(renderTarget)) {
MultisampledRenderToTextureExtension
.renderbufferStorageMultisampleEXT(
gl.RENDERBUFFER,
samples,
glInternalFormat,
renderTarget.width.toInt(),
renderTarget.height.toInt());
} else {
gl.renderbufferStorageMultisample(
gl.RENDERBUFFER,
samples,
glInternalFormat,
renderTarget.width.toInt(),
renderTarget.height.toInt());
}
} else {
gl.renderbufferStorage(gl.RENDERBUFFER, glInternalFormat,
renderTarget.width.toInt(), renderTarget.height.toInt());
}
gl.framebufferRenderbuffer(
gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer);
} else if (renderTarget.depthBuffer && renderTarget.stencilBuffer) {
var samples = getRenderTargetSamples(renderTarget);
if (isMultisample &&
useMultisampledRenderToTexture(renderTarget) == false) {
var samples = getRenderTargetSamples(renderTarget);
gl.renderbufferStorageMultisample(
gl.RENDERBUFFER,
samples,
gl.DEPTH24_STENCIL8,
renderTarget.width.toInt(),
renderTarget.height.toInt());
} else if (useMultisampledRenderToTexture(renderTarget)) {
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT(
_gl.RENDERBUFFER,
samples,
_gl.DEPTH24_STENCIL8,
renderTarget.width.toInt(),
renderTarget.height.toInt());
} else {
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL,
renderTarget.width, renderTarget.height);
}
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT,
gl.RENDERBUFFER, renderbuffer);
} else {
// Use the first texture for MRT so far
var texture = renderTarget.isWebGLMultipleRenderTargets == true
? renderTarget.texture[0]
: renderTarget.texture;
var glFormat = utils.convert(texture.format);
var glType = utils.convert(texture.type);
var glInternalFormat = getInternalFormat(
texture.internalFormat, glFormat, glType, texture.encoding);
var samples = getRenderTargetSamples(renderTarget);
if (isMultisample &&
useMultisampledRenderToTexture(renderTarget) == false) {
gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples,
glInternalFormat, renderTarget.width, renderTarget.height);
} else if (useMultisampledRenderToTexture(renderTarget)) {
MultisampledRenderToTextureExtension.renderbufferStorageMultisampleEXT(
_gl.RENDERBUFFER,
samples,
glInternalFormat,
renderTarget.width,
renderTarget.height);
} else {
gl.renderbufferStorage(gl.RENDERBUFFER, glInternalFormat,
renderTarget.width, renderTarget.height);
}
}
gl.bindRenderbuffer(gl.RENDERBUFFER, null);
}