Chromium Code Reviews| 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; |