Squash the attachment types.

We can store all relevant information in the base class, which
lets us avoid using any virtual methods. This will finally let
us avoid using reallocations on FBO attachment sets.

BUG=angleproject:963

Change-Id: Ib4b61da14efaf843478b059499c01e34f9c65e4f
Reviewed-on: https://chromium-review.googlesource.com/263488
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Brandon Jones <bajones@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/gl/FramebufferGL.cpp b/src/libANGLE/renderer/gl/FramebufferGL.cpp
index d543f95..2f19d84 100644
--- a/src/libANGLE/renderer/gl/FramebufferGL.cpp
+++ b/src/libANGLE/renderer/gl/FramebufferGL.cpp
@@ -50,7 +50,7 @@
     {
         if (attachment->type() == GL_TEXTURE)
         {
-            const gl::Texture *texture = GetAs<gl::TextureAttachment>(attachment)->getTexture();
+            const gl::Texture *texture = attachment->getTexture();
             const TextureGL *textureGL = GetImplAs<TextureGL>(texture);
 
             if (texture->getTarget() == GL_TEXTURE_2D)
@@ -75,7 +75,7 @@
         }
         else if (attachment->type() == GL_RENDERBUFFER)
         {
-            const gl::Renderbuffer *renderbuffer = GetAs<gl::RenderbufferAttachment>(attachment)->getRenderbuffer();
+            const gl::Renderbuffer *renderbuffer = attachment->getRenderbuffer();
             const RenderbufferGL *renderbufferGL = GetImplAs<RenderbufferGL>(renderbuffer);
 
             functions->framebufferRenderbuffer(GL_FRAMEBUFFER, attachmentPoint, GL_RENDERBUFFER,