Create a DefaultAttachment type and an implementation for it.

This allows for dynamically sized default attachments instead of calling
Context::makeCurrent each time the surface changes size.

BUG=angle:824

Change-Id: Ic39c0d7dc4269db53a34c01c4d915cb1a3cfbd08
Reviewed-on: https://chromium-review.googlesource.com/228180
Tested-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/validationES.cpp b/src/libGLESv2/validationES.cpp
index 382653f..f857ee9 100644
--- a/src/libGLESv2/validationES.cpp
+++ b/src/libGLESv2/validationES.cpp
@@ -573,8 +573,11 @@
 
             if (fromAngleExtension)
             {
-                const GLenum readColorbufferType = readFramebuffer->getReadColorbufferType();
-                if (readColorbufferType != GL_TEXTURE_2D && readColorbufferType != GL_RENDERBUFFER)
+                FramebufferAttachment *readColorAttachment = readFramebuffer->getReadColorbuffer();
+                if (!readColorAttachment ||
+                    (!(readColorAttachment->type() == GL_TEXTURE && readColorAttachment->getTextureImageIndex()->type == GL_TEXTURE_2D) &&
+                    readColorAttachment->type() != GL_RENDERBUFFER &&
+                    readColorAttachment->type() != GL_FRAMEBUFFER_DEFAULT))
                 {
                     context->recordError(Error(GL_INVALID_OPERATION));
                     return false;
@@ -587,7 +590,9 @@
                         FramebufferAttachment *attachment = drawFramebuffer->getColorbuffer(colorAttachment);
                         ASSERT(attachment);
 
-                        if (attachment->type() != GL_TEXTURE_2D && attachment->type() != GL_RENDERBUFFER)
+                        if (!(attachment->type() == GL_TEXTURE && attachment->getTextureImageIndex()->type == GL_TEXTURE_2D) &&
+                            attachment->type() != GL_RENDERBUFFER &&
+                            attachment->type() != GL_FRAMEBUFFER_DEFAULT)
                         {
                             context->recordError(Error(GL_INVALID_OPERATION));
                             return false;