Move FBO check from applyRenderTarget to the API.

We would traverse the applyRenderTarget path from several entry
points, which could then trigger a GL error. In-line with our
validation refactoring, move all error checks prior to executing
any state logic.

BUG=angle:571

Change-Id: I51f5bcfa41be7cdba7771eb87d5a831fa622f984
Reviewed-on: https://chromium-review.googlesource.com/203772
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 6f08d99..e70b468 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1133,6 +1133,11 @@
     return mBoundDrawFramebuffer;
 }
 
+const Framebuffer *Context::getDrawFramebuffer() const
+{
+    return mBoundDrawFramebuffer;
+}
+
 VertexArray *Context::getCurrentVertexArray() const
 {
     VertexArray *vao = getVertexArray(mState.vertexArray);
@@ -2352,11 +2357,7 @@
 bool Context::applyRenderTarget(GLenum drawMode, bool ignoreViewport)
 {
     Framebuffer *framebufferObject = getDrawFramebuffer();
-
-    if (!framebufferObject || framebufferObject->completeness() != GL_FRAMEBUFFER_COMPLETE)
-    {
-        return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION, false);
-    }
+    ASSERT(framebufferObject && framebufferObject->completeness() == GL_FRAMEBUFFER_COMPLETE);
 
     mRenderer->applyRenderTarget(framebufferObject);
 
@@ -2639,7 +2640,6 @@
         }
     }
 
-
     if (!applyRenderTarget(GL_TRIANGLES, true))   // Clips the clear to the scissor rectangle but not the viewport
     {
         return;