Index: Source/modules/webgl/WebGLRenderingContextBase.cpp |
diff --git a/Source/modules/webgl/WebGLRenderingContextBase.cpp b/Source/modules/webgl/WebGLRenderingContextBase.cpp |
index d343f6da8301e70e4195c4d8d9d466fd0090403d..3b92a338ac5b7929863a1d99407ce9f06219c2a2 100644 |
--- a/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -4123,8 +4123,14 @@ bool WebGLRenderingContextBase::validateValueFitNonNegInt32(const char* function |
return true; |
} |
-PassRefPtr<Image> WebGLRenderingContextBase::drawImageIntoBuffer(Image* image, int width, int height, const char* functionName) |
+// TODO(fmalita): figure why WebGLImageConversion::ImageExtractor can't handle SVG-backed images, |
+// and get rid of this intermediate step. |
+PassRefPtr<Image> WebGLRenderingContextBase::drawImageIntoBuffer(PassRefPtr<Image> passImage, |
+ int width, int height, const char* functionName) |
{ |
+ RefPtr<Image> image(passImage); |
+ ASSERT(image); |
+ |
IntSize size(width, height); |
ImageBuffer* buf = m_generatedImageCache.imageBuffer(size); |
if (!buf) { |
@@ -4132,6 +4138,9 @@ PassRefPtr<Image> WebGLRenderingContextBase::drawImageIntoBuffer(Image* image, i |
return nullptr; |
} |
+ if (!image->currentFrameKnownToBeOpaque()) |
+ buf->canvas()->clear(SK_ColorTRANSPARENT); |
+ |
IntRect srcRect(IntPoint(), image->size()); |
IntRect destRect(0, 0, size.width(), size.height()); |
SkPaint paint; |
@@ -4197,8 +4206,8 @@ void WebGLRenderingContextBase::texImage2D(GLenum target, GLint level, GLenum in |
return; |
RefPtr<Image> imageForRender = image->cachedImage()->imageForLayoutObject(image->layoutObject()); |
- if (imageForRender->isSVGImage()) |
- imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width(), image->height(), "texImage2D"); |
+ if (imageForRender && imageForRender->isSVGImage()) |
+ imageForRender = drawImageIntoBuffer(imageForRender.release(), image->width(), image->height(), "texImage2D"); |
if (!imageForRender || !validateTexFunc("texImage2D", NotTexSubImage2D, SourceHTMLImageElement, target, level, internalformat, imageForRender->width(), imageForRender->height(), 0, format, type, 0, 0)) |
return; |
@@ -4507,8 +4516,8 @@ void WebGLRenderingContextBase::texSubImage2D(GLenum target, GLint level, GLint |
return; |
RefPtr<Image> imageForRender = image->cachedImage()->imageForLayoutObject(image->layoutObject()); |
- if (imageForRender->isSVGImage()) |
- imageForRender = drawImageIntoBuffer(imageForRender.get(), image->width(), image->height(), "texSubImage2D"); |
+ if (imageForRender && imageForRender->isSVGImage()) |
+ imageForRender = drawImageIntoBuffer(imageForRender.release(), image->width(), image->height(), "texSubImage2D"); |
if (!imageForRender || !validateTexFunc("texSubImage2D", TexSubImage2D, SourceHTMLImageElement, target, level, 0, imageForRender->width(), imageForRender->height(), 0, format, type, xoffset, yoffset)) |
return; |