Refactored glRenderBufferStorage* validation and implemented glRenderBufferStorageMultisample.
TRAC #23212
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 3c76c4d..70add35 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1189,32 +1189,32 @@
void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum internalformat, GLsizei samples)
{
+ const bool color = gl::IsColorRenderingSupported(internalformat, this);
+ const bool depth = gl::IsDepthRenderingSupported(internalformat, this);
+ const bool stencil = gl::IsStencilRenderingSupported(internalformat, this);
+
RenderbufferStorage *renderbuffer = NULL;
- switch (internalformat)
+
+ if (color)
{
- case GL_DEPTH_COMPONENT16:
- renderbuffer = new gl::Depthbuffer(mRenderer, width, height, samples);
- break;
- case GL_RGBA4:
- case GL_RGB5_A1:
- case GL_RGB565:
- case GL_RGB8_OES:
- case GL_RGBA8_OES:
- case GL_SRGB8_ALPHA8:
- case GL_RGB10_A2:
- case GL_RG8:
- case GL_R8:
renderbuffer = new gl::Colorbuffer(mRenderer,width, height, internalformat, samples);
- break;
- case GL_STENCIL_INDEX8:
- renderbuffer = new gl::Stencilbuffer(mRenderer, width, height, samples);
- break;
- case GL_DEPTH24_STENCIL8_OES:
+ }
+ else if (depth && stencil)
+ {
renderbuffer = new gl::DepthStencilbuffer(mRenderer, width, height, samples);
- break;
- default:
- UNIMPLEMENTED(); // TODO: Remaining ES3 formats
- UNREACHABLE(); return;
+ }
+ else if (depth)
+ {
+ renderbuffer = new gl::Depthbuffer(mRenderer, width, height, samples);
+ }
+ else if (stencil)
+ {
+ renderbuffer = new gl::Stencilbuffer(mRenderer, width, height, samples);
+ }
+ else
+ {
+ UNREACHABLE();
+ return;
}
Renderbuffer *renderbufferObject = mState.renderbuffer.get();