@@ -349,7 +349,7 @@ void LayerRenderer::flushLayer(Layer* layer) {
349349
350350bool LayerRenderer::copyLayer (Layer* layer, SkBitmap* bitmap) {
351351 Caches& caches = Caches::getInstance ();
352- if (layer && layer-> isTextureLayer () && bitmap->width () <= caches.maxTextureSize &&
352+ if (layer && bitmap->width () <= caches.maxTextureSize &&
353353 bitmap->height () <= caches.maxTextureSize ) {
354354
355355 GLuint fbo = caches.fboCache .get ();
@@ -362,6 +362,7 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) {
362362
363363 GLuint texture;
364364 GLuint previousFbo;
365+ GLuint previousViewport[4 ];
365366
366367 GLenum format;
367368 GLenum type;
@@ -391,11 +392,13 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) {
391392
392393 float alpha = layer->getAlpha ();
393394 SkXfermode::Mode mode = layer->getMode ();
395+ GLuint previousLayerFbo = layer->getFbo ();
394396
395397 layer->setAlpha (255 , SkXfermode::kSrc_Mode );
396398 layer->setFbo (fbo);
397399
398400 glGetIntegerv (GL_FRAMEBUFFER_BINDING , (GLint*) &previousFbo);
401+ glGetIntegerv (GL_VIEWPORT , (GLint*) &previousViewport);
399402 glBindFramebuffer (GL_FRAMEBUFFER , fbo);
400403
401404 glGenTextures (1 , &texture);
@@ -463,9 +466,11 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) {
463466
464467 glBindFramebuffer (GL_FRAMEBUFFER , previousFbo);
465468 layer->setAlpha (alpha, mode);
466- layer->setFbo (0 );
469+ layer->setFbo (previousLayerFbo );
467470 glDeleteTextures (1 , &texture);
468471 caches.fboCache .put (fbo);
472+ glViewport (previousViewport[0 ], previousViewport[1 ],
473+ previousViewport[2 ], previousViewport[3 ]);
469474
470475 return status;
471476 }
0 commit comments