0

Fixed tile filtering for the software compositor.

Also switched to using drawBitmapRectToRect instead of drawBitmapRect since
it takes floating point rects as parameters.

Now

platform/chromium/virtual/softwarecompositing/visibility/visibility-image-layers.html

is rendering correctly (minus filtering differences between Mesa and Skia).


BUG=124671

Review URL: https://chromiumcodereview.appspot.com/11369079

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166178 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
skaslev@chromium.org
2012-11-06 09:12:00 +00:00
parent 35d8285d85
commit 66dce29b1a

@ -257,10 +257,13 @@ void SoftwareRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureD
ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resourceId());
const SkBitmap* bitmap = lock.skBitmap();
gfx::RectF uvRect = gfx::ScaleRect(quad->uvRect(), bitmap->width(), bitmap->height());
SkIRect skUvRect = toSkIRect(gfx::ToEnclosingRect(uvRect));
SkRect skUvRect = toSkRect(uvRect);
if (quad->flipped())
m_skCurrentCanvas->scale(1, -1);
m_skCurrentCanvas->drawBitmapRect(*bitmap, &skUvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint);
m_skCurrentCanvas->drawBitmapRectToRect(*bitmap, &skUvRect,
toSkRect(quadVertexRect()),
&m_skCurrentPaint);
}
void SoftwareRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQuad* quad)
@ -268,8 +271,14 @@ void SoftwareRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQua
DCHECK(isSoftwareResource(quad->resourceId()));
ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->resourceId());
SkIRect uvRect = toSkIRect(gfx::Rect(gfx::PointAtOffsetFromOrigin(quad->textureOffset()), quad->quadRect().size()));
m_skCurrentCanvas->drawBitmapRect(*lock.skBitmap(), &uvRect, toSkRect(quadVertexRect()), &m_skCurrentPaint);
SkRect uvRect = SkRect::MakeXYWH(
quad->textureOffset().x(), quad->textureOffset().y(),
quad->quadRect().width(), quad->quadRect().height());
if (quad->textureFilter() != GL_NEAREST)
m_skCurrentPaint.setFilterBitmap(true);
m_skCurrentCanvas->drawBitmapRectToRect(*lock.skBitmap(), &uvRect,
toSkRect(quadVertexRect()),
&m_skCurrentPaint);
}
void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const RenderPassDrawQuad* quad)