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

Unified Diff: cc/gl_renderer.cc

Issue 11358181: Use nearest neighbor filtering for non-translated quads (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Change CHECK() into DCHECK(). Created 8 years 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
« no previous file with comments | « no previous file | cc/gl_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/gl_renderer.cc
diff --git a/cc/gl_renderer.cc b/cc/gl_renderer.cc
index c2646c10451fe72cb824a03a96b00cd79c142369..872e0f2576079aa97b016e44084b9980b34c750f 100644
--- a/cc/gl_renderer.cc
+++ b/cc/gl_renderer.cc
@@ -538,15 +538,6 @@ void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua
} else {
filterBitmap = applyFilters(this, renderPass->filters, contentsTexture, m_client->hasImplThread());
}
- scoped_ptr<ResourceProvider::ScopedReadLockGL> contentsResourceLock;
- unsigned contentsTextureId = 0;
- if (filterBitmap.getTexture()) {
- GrTexture* texture = reinterpret_cast<GrTexture*>(filterBitmap.getTexture());
- contentsTextureId = texture->getTextureHandle();
- } else {
- contentsResourceLock = make_scoped_ptr(new ResourceProvider::ScopedReadLockGL(m_resourceProvider, contentsTexture->id()));
- contentsTextureId = contentsResourceLock->textureId();
- }
// Draw the background texture if there is one.
if (backgroundTexture) {
@@ -577,7 +568,13 @@ void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua
// FIXME: use the backgroundTexture and blend the background in with this draw instead of having a separate copy of the background texture.
- context()->bindTexture(GL_TEXTURE_2D, contentsTextureId);
+ scoped_ptr<ResourceProvider::ScopedReadLockGL> contentsResourceLock;
+ if (filterBitmap.getTexture()) {
+ GrTexture* texture = reinterpret_cast<GrTexture*>(filterBitmap.getTexture());
+ context()->bindTexture(GL_TEXTURE_2D, texture->getTextureHandle());
+ } else
+ contentsResourceLock = make_scoped_ptr(new ResourceProvider::ScopedSamplerGL(m_resourceProvider, contentsTexture->id(),
+ GL_TEXTURE_2D, GL_LINEAR));
int shaderQuadLocation = -1;
int shaderEdgeLocation = -1;
@@ -633,7 +630,7 @@ void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua
GLC(context(), context()->uniform1i(shaderMaskSamplerLocation, 1));
GLC(context(), context()->uniform2f(shaderMaskTexCoordScaleLocation, quad->mask_tex_coord_scale_x, quad->mask_tex_coord_scale_y));
GLC(context(), context()->uniform2f(shaderMaskTexCoordOffsetLocation, quad->mask_tex_coord_offset_x, quad->mask_tex_coord_offset_y));
- context()->bindTexture(GL_TEXTURE_2D, maskTextureId);
+ m_resourceProvider->bindForSampling(quad->mask_resource_id, GL_TEXTURE_2D, GL_LINEAR);
GLC(context(), context()->activeTexture(GL_TEXTURE0));
}
@@ -781,8 +778,9 @@ void GLRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQuad* qua
setUseProgram(uniforms.program);
GLC(context(), context()->uniform1i(uniforms.samplerLocation, 0));
- ResourceProvider::ScopedReadLockGL quadResourceLock(m_resourceProvider, quad->resource_id);
- GLC(context(), context()->bindTexture(GL_TEXTURE_2D, quadResourceLock.textureId()));
+ bool scaled = (texToGeomScaleX != 1 || texToGeomScaleY != 1);
+ GLenum filter = (quad->IsAntialiased() || scaled || !quad->quadTransform().IsIdentityOrIntegerTranslation()) ? GL_LINEAR : GL_NEAREST;
+ ResourceProvider::ScopedSamplerGL quadResourceLock(m_resourceProvider, quad->resource_id, GL_TEXTURE_2D, filter);
bool useAA = !clipped && quad->IsAntialiased();
if (useAA) {
@@ -886,15 +884,12 @@ void GLRenderer::drawYUVVideoQuad(const DrawingFrame& frame, const YUVVideoDrawQ
const VideoLayerImpl::FramePlane& uPlane = quad->u_plane;
const VideoLayerImpl::FramePlane& vPlane = quad->v_plane;
- ResourceProvider::ScopedReadLockGL yPlaneLock(m_resourceProvider, yPlane.resourceId);
- ResourceProvider::ScopedReadLockGL uPlaneLock(m_resourceProvider, uPlane.resourceId);
- ResourceProvider::ScopedReadLockGL vPlaneLock(m_resourceProvider, vPlane.resourceId);
GLC(context(), context()->activeTexture(GL_TEXTURE1));
- GLC(context(), context()->bindTexture(GL_TEXTURE_2D, yPlaneLock.textureId()));
+ ResourceProvider::ScopedSamplerGL yPlaneLock(m_resourceProvider, yPlane.resourceId, GL_TEXTURE_2D, GL_LINEAR);
GLC(context(), context()->activeTexture(GL_TEXTURE2));
- GLC(context(), context()->bindTexture(GL_TEXTURE_2D, uPlaneLock.textureId()));
+ ResourceProvider::ScopedSamplerGL uPlaneLock(m_resourceProvider, uPlane.resourceId, GL_TEXTURE_2D, GL_LINEAR);
GLC(context(), context()->activeTexture(GL_TEXTURE3));
- GLC(context(), context()->bindTexture(GL_TEXTURE_2D, vPlaneLock.textureId()));
+ ResourceProvider::ScopedSamplerGL vPlaneLock(m_resourceProvider, vPlane.resourceId, GL_TEXTURE_2D, GL_LINEAR);
setUseProgram(program->program());
@@ -1086,8 +1081,7 @@ void GLRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureDrawQua
const gfx::RectF& uvRect = quad->uv_rect;
GLC(context(), context()->uniform4f(binding.texTransformLocation, uvRect.x(), uvRect.y(), uvRect.width(), uvRect.height()));
- ResourceProvider::ScopedReadLockGL quadResourceLock(m_resourceProvider, quad->resource_id);
- GLC(context(), context()->bindTexture(GL_TEXTURE_2D, quadResourceLock.textureId()));
+ ResourceProvider::ScopedSamplerGL quadResourceLock(m_resourceProvider, quad->resource_id, GL_TEXTURE_2D, GL_LINEAR);
if (!quad->premultiplied_alpha) {
// As it turns out, the premultiplied alpha blending function (ONE, ONE_MINUS_SRC_ALPHA)
« no previous file with comments | « no previous file | cc/gl_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698