Get rid of createRenderTargetFrom3DAPIState and associated glGets necessary to support it.

Review URL: http://codereview.appspot.com/4928041/



git-svn-id: http://skia.googlecode.com/svn/trunk@2144 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrContext.cpp b/gpu/src/GrContext.cpp
index 506cb9f..9c3f298 100644
--- a/gpu/src/GrContext.cpp
+++ b/gpu/src/GrContext.cpp
@@ -548,10 +548,6 @@
     return fGpu->createPlatformSurface(desc);
 }
 
-GrRenderTarget* GrContext::createRenderTargetFrom3DApiState() {
-    return fGpu->createRenderTargetFrom3DApiState();
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 
 bool GrContext::supportsIndex8PixelConfig(const GrSamplerState& sampler,
diff --git a/gpu/src/GrGpu.cpp b/gpu/src/GrGpu.cpp
index 7744e6a..24950c4 100644
--- a/gpu/src/GrGpu.cpp
+++ b/gpu/src/GrGpu.cpp
@@ -196,11 +196,6 @@
     }
 }
 
-GrRenderTarget* GrGpu::createRenderTargetFrom3DApiState() {
-    this->handleDirtyContext();
-    return this->onCreateRenderTargetFrom3DApiState();
-}
-
 GrResource* GrGpu::createPlatformSurface(const GrPlatformSurfaceDesc& desc) {
     this->handleDirtyContext();
     return this->onCreatePlatformSurface(desc);
diff --git a/gpu/src/GrGpu.h b/gpu/src/GrGpu.h
index e1e85f7..deaba67 100644
--- a/gpu/src/GrGpu.h
+++ b/gpu/src/GrGpu.h
@@ -123,17 +123,6 @@
     GrResource* createPlatformSurface(const GrPlatformSurfaceDesc& desc);
 
     /**
-     * Reads the current target object (e.g. FBO or IDirect3DSurface9*) and
-     * viewport state from the underlying 3D API and wraps it in a
-     * GrRenderTarget. The GrRenderTarget will not attempt to delete/destroy the
-     * underlying object in its destructor and it is up to caller to guarantee
-     * that it remains valid while the GrRenderTarget is used.
-     *
-     * @return the newly created GrRenderTarget
-     */
-    GrRenderTarget* createRenderTargetFrom3DApiState();
-
-    /**
      * Creates a vertex buffer.
      *
      * @param size    size in bytes of the vertex buffer
@@ -427,7 +416,6 @@
                                        const void* srcData,
                                        size_t rowBytes) = 0;
     virtual GrResource* onCreatePlatformSurface(const GrPlatformSurfaceDesc& desc) = 0;
-    virtual GrRenderTarget* onCreateRenderTargetFrom3DApiState() = 0;
     virtual GrVertexBuffer* onCreateVertexBuffer(uint32_t size,
                                                  bool dynamic) = 0;
     virtual GrIndexBuffer* onCreateIndexBuffer(uint32_t size,
diff --git a/gpu/src/GrGpuGL.cpp b/gpu/src/GrGpuGL.cpp
index 35e918b..ba7615d 100644
--- a/gpu/src/GrGpuGL.cpp
+++ b/gpu/src/GrGpuGL.cpp
@@ -154,11 +154,6 @@
 
 static bool fbo_test(const GrGLInterface* gl, int w, int h) {
 
-    GrGLint savedFBO;
-    GrGLint savedTexUnit;
-    GR_GL_GetIntegerv(gl, GR_GL_ACTIVE_TEXTURE, &savedTexUnit);
-    GR_GL_GetIntegerv(gl, GR_GL_FRAMEBUFFER_BINDING, &savedFBO);
-
     GR_GL_CALL(gl, ActiveTexture(GR_GL_TEXTURE0 + SPARE_TEX_UNIT));
 
     GrGLuint testFBO;
@@ -182,9 +177,6 @@
     GR_GL_CALL(gl, DeleteFramebuffers(1, &testFBO));
     GR_GL_CALL(gl, DeleteTextures(1, &testRTTex));
 
-    GR_GL_CALL(gl, ActiveTexture(savedTexUnit));
-    GR_GL_CALL(gl, BindFramebuffer(GR_GL_FRAMEBUFFER, savedFBO));
-
     return status == GR_GL_FRAMEBUFFER_COMPLETE;
 }
 
@@ -710,193 +702,8 @@
     }
 }
 
-namespace {
-
-static const GrGLenum kUnknownGLFormat = ~0;
-
-GrGLenum get_fbo_color_format(const GrGLInterface* gl) {
-    GrGLint cbType;
-    GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                                    GR_GL_COLOR_ATTACHMENT0,
-                                    GR_GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
-                                    &cbType);
-    GrGLint cbID;
-    GrGLint cbFormat;
-    switch (cbType) {
-        case GR_GL_RENDERBUFFER:
-            GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                                    GR_GL_COLOR_ATTACHMENT0,
-                                    GR_GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
-                                    &cbID);
-            GR_GL_CALL(gl, BindRenderbuffer(GR_GL_RENDERBUFFER, cbID));
-            GR_GL_GetRenderbufferParameteriv(gl, GR_GL_RENDERBUFFER,
-                                             GR_GL_RENDERBUFFER_INTERNAL_FORMAT,
-                                             &cbFormat);
-            return cbFormat;
-            break;
-        case GR_GL_TEXTURE:
-            // ES doesn't have glGetTexLevelParameter
-            if (gl->supportsDesktop()) {
-                GrGLint cbLevel;
-                GrGLint cbFace;
-                GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                                    GR_GL_COLOR_ATTACHMENT0,
-                                    GR_GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
-                                    &cbID);
-                GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                                    GR_GL_COLOR_ATTACHMENT0,
-                                    GR_GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
-                                    &cbLevel);
-                GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                            GR_GL_COLOR_ATTACHMENT0,
-                            GR_GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
-                            &cbFace);
-                GrGLenum bind;
-                GrGLenum target;
-                if (cbFace) {
-                    bind = GR_GL_TEXTURE_CUBE_MAP;
-                    target = cbFace;
-                } else {
-                    bind = GR_GL_TEXTURE_2D;
-                    target = GR_GL_TEXTURE_2D;
-                }
-                GR_GL_CALL(gl, BindTexture(bind, cbID));
-                GR_GL_GetTexLevelParameteriv(gl, target, cbLevel, 
-                                    GR_GL_TEXTURE_INTERNAL_FORMAT, &cbFormat);
-                return cbFormat;
-            } else {
-                return kUnknownGLFormat;
-            }
-            break;
-        default:
-            // we can get here with FBO 0, not a render buffer or a texture
-            return kUnknownGLFormat;
-    }
-}
-
-GrPixelConfig internal_color_format_to_config(GrGLenum iFormat) {
-    switch (iFormat) {
-        case GR_GL_RGB565:
-            return kRGB_565_GrPixelConfig;
-        case GR_GL_RGBA4:
-            return kRGBA_4444_GrPixelConfig;
-        case GR_GL_RGBA8:
-        case GR_GL_SRGB8_ALPHA8:
-        case GR_GL_SRGB_ALPHA:
-        case GR_GL_RGBA:
-        case GR_GL_BGRA:
-            return kRGBA_8888_GrPixelConfig;
-        case GR_GL_RGB8:
-        case GR_GL_SRGB8:
-        case GR_GL_SRGB:
-            return kRGBX_8888_GrPixelConfig;
-        default:
-            // there are many GL formats we don't have enums
-            // for. We should still render to them if the client
-            // asks us.
-            return kUnknown_GrPixelConfig;
-    }
-}
-
-GrPixelConfig get_implied_color_config(const GrGLInterface* gl,
-                                       bool arbFBOExtension) {
-    GrGLint rSize, bSize, gSize, aSize;
-    if (arbFBOExtension) {
-        GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER, 
-                GR_GL_COLOR_ATTACHMENT0,
-                GR_GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, &rSize);
-        GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                GR_GL_COLOR_ATTACHMENT0,
-                GR_GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, &gSize);
-        GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER, 
-                GR_GL_COLOR_ATTACHMENT0,
-                GR_GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, &bSize);
-        GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                GR_GL_COLOR_ATTACHMENT0, 
-                GR_GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, &aSize);
-    } else {
-        GR_GL_GetIntegerv(gl, GR_GL_RED_BITS, &rSize);
-        GR_GL_GetIntegerv(gl, GR_GL_GREEN_BITS, &gSize);
-        GR_GL_GetIntegerv(gl, GR_GL_BLUE_BITS, &bSize);
-        GR_GL_GetIntegerv(gl, GR_GL_ALPHA_BITS, &aSize);
-    }
-
-    if(8 == rSize && 8 == gSize && 8 == bSize) {
-       if (0 == aSize) {
-           return kRGBX_8888_GrPixelConfig;
-       } else if (8 == aSize) {
-           return kRGBA_8888_GrPixelConfig;
-       }
-    } else if (4 == rSize && 4 == gSize && 4 == bSize && 4 == aSize) {
-        return kRGBA_4444_GrPixelConfig;
-    } else if (5 == rSize && 6 == gSize && 5 == bSize && 0 == aSize) {
-        return kRGB_565_GrPixelConfig;
-    }
-    return kUnknown_GrPixelConfig;
-}
-
-int get_fbo_stencil_bits(const GrGLInterface* gl, bool arbFBOExtension) {
-    GrGLint stencilBits;
-    if (arbFBOExtension) {
-        GR_GL_GetFramebufferAttachmentParameteriv(gl, GR_GL_FRAMEBUFFER,
-                                    GR_GL_STENCIL_ATTACHMENT,
-                                    GR_GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE,
-                                    &stencilBits);
-    } else {
-        GR_GL_GetIntegerv(gl, GR_GL_STENCIL_BITS, &stencilBits);
-    }
-    return stencilBits;
-}
-}
-
-GrRenderTarget* GrGpuGL::onCreateRenderTargetFrom3DApiState() {
-
-    GrGLRenderTarget::Desc rtDesc;
-
-    GR_GL_GetIntegerv(this->glInterface(), GR_GL_FRAMEBUFFER_BINDING, 
-                      (GrGLint*)&rtDesc.fRTFBOID);
-    rtDesc.fTexFBOID = rtDesc.fRTFBOID;
-    rtDesc.fMSColorRenderbufferID = 0;
-
-    bool arbFBO = ((kDesktop_GrGLBinding == fGLBinding) && (fGLVersion > 3.0 ||
-                   this->hasExtension("GL_ARB_framebuffer_object")));
-
-    GrGLIRect viewport;
-    viewport.setFromGLViewport(this->glInterface());
-    int stencilBits = get_fbo_stencil_bits(this->glInterface(), arbFBO);
-    GR_GL_GetIntegerv(this->glInterface(), GR_GL_SAMPLES, &rtDesc.fSampleCnt);
-
-    SkAutoTUnref<GrGLStencilBuffer> sb;
-    if (stencilBits) {
-        GrGLStencilBuffer::Format format;
-        // we could query this but we don't really need it
-        format.fInternalFormat = GrGLStencilBuffer::kUnknownInternalFormat;
-        format.fPacked = false;
-        format.fStencilBits = stencilBits;
-        format.fTotalBits = stencilBits;
-        sb.reset(new GrGLStencilBuffer(this, 0, viewport.fWidth,
-                                       viewport.fHeight, rtDesc.fSampleCnt,
-                                       format));
-    }
-
-    GrGLenum fmat = get_fbo_color_format(this->glInterface());
-    if (kUnknownGLFormat == fmat) {
-        rtDesc.fConfig = get_implied_color_config(this->glInterface(), arbFBO);
-    } else {
-        rtDesc.fConfig = internal_color_format_to_config(fmat);
-    }
-
-    // may have to bind a texture to gets its format
-    this->setSpareTextureUnit();
-
-    rtDesc.fOwnIDs = false;
-
-    GrGLRenderTarget* target = new GrGLRenderTarget(this, rtDesc, viewport);
-    target->setStencilBuffer(sb.get());
-    return target;
-}
-
 ///////////////////////////////////////////////////////////////////////////////
+
 static const GrGLuint kUnknownBitCount = ~0;
 
 void GrGpuGL::setupStencilFormats() {
diff --git a/gpu/src/GrGpuGL.h b/gpu/src/GrGpuGL.h
index fc104c1..b45928f 100644
--- a/gpu/src/GrGpuGL.h
+++ b/gpu/src/GrGpuGL.h
@@ -82,7 +82,6 @@
     virtual GrIndexBuffer* onCreateIndexBuffer(uint32_t size,
                                                bool dynamic);
     virtual GrResource* onCreatePlatformSurface(const GrPlatformSurfaceDesc& desc);
-    virtual GrRenderTarget* onCreateRenderTargetFrom3DApiState();
     virtual bool createStencilBufferForRenderTarget(GrRenderTarget* rt,
                                                     int width, int height);
     virtual bool attachStencilBufferToRenderTarget(GrStencilBuffer* sb,
diff --git a/gpu/src/GrGpuGLShaders.cpp b/gpu/src/GrGpuGLShaders.cpp
index 748cf1a..11dc993 100644
--- a/gpu/src/GrGpuGLShaders.cpp
+++ b/gpu/src/GrGpuGLShaders.cpp
@@ -256,8 +256,6 @@
 GrGpuGLShaders::GrGpuGLShaders(const GrGLInterface* gl)
     : GrGpuGL(gl, get_binding_in_use(gl)) {
 
-    resetContext();
-
     f4X4DownsampleFilterSupport = true;
     if (kDesktop_GrGLBinding == this->glBinding()) {
         fDualSourceBlendingSupport =