Implement IO_OUTPUT + SurfaceTexture

Change-Id: Id96fecd6d768196523330c5eda77c4ee86b9bd3c
diff --git a/driver/rsdFrameBufferObj.cpp b/driver/rsdFrameBufferObj.cpp
index 91452b0..afdf9b8 100644
--- a/driver/rsdFrameBufferObj.cpp
+++ b/driver/rsdFrameBufferObj.cpp
@@ -18,6 +18,7 @@
 #include "rsdFrameBufferObj.h"
 #include "rsdAllocation.h"
 #include "rsdGL.h"
+#include "rsdCore.h"
 
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
@@ -122,23 +123,33 @@
 }
 
 void RsdFrameBufferObj::setActive(const Context *rsc) {
+    RsdHal *dc = (RsdHal *)rsc->mHal.drv;
     bool framebuffer = renderToFramebuffer();
-    if (!framebuffer) {
-        if(mFBOId == 0) {
-            RSD_CALL_GL(glGenFramebuffers, 1, &mFBOId);
-        }
-        RSD_CALL_GL(glBindFramebuffer, GL_FRAMEBUFFER, mFBOId);
 
-        if (mDirty) {
-            setDepthAttachment();
-            setColorAttachment();
-            mDirty = false;
-        }
-
-        RSD_CALL_GL(glViewport, 0, 0, mWidth, mHeight);
-        checkError(rsc);
+    if(mColorTargets[0] && mColorTargets[0]->wnd) {
+        rsdGLSetInternalSurface(rsc, mColorTargets[0]->wnd);
     } else {
-        RSD_CALL_GL(glBindFramebuffer, GL_FRAMEBUFFER, 0);
-        RSD_CALL_GL(glViewport, 0, 0, rsc->getWidth(), rsc->getHeight());
+        if (!framebuffer) {
+            if(mFBOId == 0) {
+                RSD_CALL_GL(glGenFramebuffers, 1, &mFBOId);
+            }
+            RSD_CALL_GL(glBindFramebuffer, GL_FRAMEBUFFER, mFBOId);
+
+            if (mDirty) {
+                setDepthAttachment();
+                setColorAttachment();
+                mDirty = false;
+            }
+
+            RSD_CALL_GL(glViewport, 0, 0, mWidth, mHeight);
+            checkError(rsc);
+        } else {
+            if(dc->gl.wndSurface != dc->gl.currentWndSurface) {
+                rsdGLSetInternalSurface(rsc, dc->gl.wndSurface);
+            } else {
+                RSD_CALL_GL(glBindFramebuffer, GL_FRAMEBUFFER, 0);
+            }
+            RSD_CALL_GL(glViewport, 0, 0, rsc->getWidth(), rsc->getHeight());
+        }
     }
 }