Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Unified Diff: Source/modules/webgl/WebGLRenderingContextBase.cpp

Issue 1315233003: WebGL's SVGImage buffer should be cleared (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: updated results Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698