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

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: Associate resources with min/mag filters and use NEAREST for tile quads when feasible. Created 8 years, 1 month 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') | cc/resource_provider.h » ('J')
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 e8454ccbf19edba2721f2f2b13abc6cf23992a5d..54774f50185d579b5d8551341d0dd0156e588c82 100644
--- a/cc/gl_renderer.cc
+++ b/cc/gl_renderer.cc
@@ -539,14 +539,11 @@ void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua
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();
- }
+ context()->bindTexture(GL_TEXTURE_2D, texture->getTextureHandle());
jamesr 2012/11/26 06:54:26 you're moving a bind call up here but look at line
+ } else
+ contentsResourceLock = make_scoped_ptr(new ResourceProvider::ScopedSamplerGL(m_resourceProvider, contentsTexture->id(), GL_TEXTURE_2D));
// Draw the background texture if there is one.
if (backgroundTexture) {
@@ -577,8 +574,6 @@ 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);
-
int shaderQuadLocation = -1;
int shaderEdgeLocation = -1;
int shaderMaskSamplerLocation = -1;
@@ -633,7 +628,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);
GLC(context(), context()->activeTexture(GL_TEXTURE0));
}
@@ -781,8 +776,8 @@ void GLRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQuad* qua
GLC(context(), context()->useProgram(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()));
+ GLenum filter = (quad->IsAntialiased() || texToGeomScaleX != 1 || texToGeomScaleY != 1 || !quad->quadTransform().isIntegerTranslation()) ? GL_LINEAR : GL_NEAREST;
jamesr 2012/11/26 06:54:26 this line is crazy long - can you break it up a bi
Sami 2012/11/30 17:49:27 Agreed, this is long even for WebKit standards. I'
+ ResourceProvider::ScopedSamplerGL quadResourceLock(m_resourceProvider, quad->resource_id, GL_TEXTURE_2D, filter, filter);
bool useAA = !clipped && quad->IsAntialiased();
if (useAA) {
@@ -886,15 +881,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);
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);
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);
GLC(context(), context()->useProgram(program->program()));
@@ -990,8 +982,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);
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') | cc/resource_provider.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698