Index: Source/modules/webgl/WebGLRenderingContextBase.cpp |
diff --git a/Source/modules/webgl/WebGLRenderingContextBase.cpp b/Source/modules/webgl/WebGLRenderingContextBase.cpp |
index d343f6da8301e70e4195c4d8d9d466fd0090403d..a716ebd6d32b6ebeae47bb7171008705500e2298 100644 |
--- a/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -4123,8 +4123,13 @@ 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> image, int width, |
+ int height, const char* functionName) |
{ |
+ ASSERT(image); |
Ken Russell (switch to Gerrit)
2015/09/08 19:34:01
If this is being changed to take PassRefPtr<Image>
f(malita)
2015/09/08 19:51:42
Done.
|
+ |
IntSize size(width, height); |
ImageBuffer* buf = m_generatedImageCache.imageBuffer(size); |
if (!buf) { |
@@ -4132,6 +4137,9 @@ PassRefPtr<Image> WebGLRenderingContextBase::drawImageIntoBuffer(Image* image, i |
return nullptr; |
} |
+ if (!image->currentFrameKnownToBeOpaque()) |
pdr.
2015/09/08 18:33:58
Why wasn't this needed for transparent animated gi
f(malita)
2015/09/08 18:44:45
We only ever call drawImageIntoBuffer for SVG imag
|
+ buf->canvas()->clear(SK_ColorTRANSPARENT); |
+ |
IntRect srcRect(IntPoint(), image->size()); |
IntRect destRect(0, 0, size.width(), size.height()); |
SkPaint paint; |
@@ -4197,8 +4205,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 +4515,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; |