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

Side by Side Diff: cc/gl_renderer.cc

Issue 11774005: Migrate more functions from MathUtil to gfx::Transform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: try to fix double/float conversion errors Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/draw_quad_unittest.cc ('k') | cc/layer_sorter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/gl_renderer.h" 5 #include "cc/gl_renderer.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 512 }
513 513
514 void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua d* quad) 514 void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua d* quad)
515 { 515 {
516 CachedResource* contentsTexture = m_renderPassTextures.get(quad->render_pass _id); 516 CachedResource* contentsTexture = m_renderPassTextures.get(quad->render_pass _id);
517 if (!contentsTexture || !contentsTexture->id()) 517 if (!contentsTexture || !contentsTexture->id())
518 return; 518 return;
519 519
520 gfx::Transform quadRectMatrix; 520 gfx::Transform quadRectMatrix;
521 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->rect); 521 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->rect);
522 gfx::Transform contentsDeviceTransform = MathUtil::to2dTransform(frame.windo wMatrix * frame.projectionMatrix * quadRectMatrix); 522 gfx::Transform contentsDeviceTransform = frame.windowMatrix * frame.projecti onMatrix * quadRectMatrix;
523 contentsDeviceTransform.FlattenTo2d();
523 524
524 // Can only draw surface if device matrix is invertible. 525 // Can only draw surface if device matrix is invertible.
525 gfx::Transform contentsDeviceTransformInverse(gfx::Transform::kSkipInitializ ation); 526 gfx::Transform contentsDeviceTransformInverse(gfx::Transform::kSkipInitializ ation);
526 if (!contentsDeviceTransform.GetInverse(&contentsDeviceTransformInverse)) 527 if (!contentsDeviceTransform.GetInverse(&contentsDeviceTransformInverse))
527 return; 528 return;
528 529
529 scoped_ptr<ScopedResource> backgroundTexture = drawBackgroundFilters( 530 scoped_ptr<ScopedResource> backgroundTexture = drawBackgroundFilters(
530 frame, quad, contentsDeviceTransform, contentsDeviceTransformInverse); 531 frame, quad, contentsDeviceTransform, contentsDeviceTransformInverse);
531 532
532 // FIXME: Cache this value so that we don't have to do it for both the surfa ce and its replica. 533 // FIXME: Cache this value so that we don't have to do it for both the surfa ce and its replica.
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 GLC(context(), context()->activeTexture(GL_TEXTURE0)); 659 GLC(context(), context()->activeTexture(GL_TEXTURE0));
659 } 660 }
660 661
661 if (shaderEdgeLocation != -1) { 662 if (shaderEdgeLocation != -1) {
662 float edge[24]; 663 float edge[24];
663 deviceLayerEdges.toFloatArray(edge); 664 deviceLayerEdges.toFloatArray(edge);
664 deviceLayerBounds.toFloatArray(&edge[12]); 665 deviceLayerBounds.toFloatArray(&edge[12]);
665 GLC(context(), context()->uniform3fv(shaderEdgeLocation, 8, edge)); 666 GLC(context(), context()->uniform3fv(shaderEdgeLocation, 8, edge));
666 } 667 }
667 668
668 // Map device space quad to surface space. contentsDeviceTransform has no 3d component since it was generated with to2dTransform() so we don't need to proje ct. 669 // Map device space quad to surface space. contentsDeviceTransform has no 3d component since it was flattened, so we don't need to project.
669 gfx::QuadF surfaceQuad = MathUtil::mapQuad(contentsDeviceTransformInverse, d eviceLayerEdges.ToQuadF(), clipped); 670 gfx::QuadF surfaceQuad = MathUtil::mapQuad(contentsDeviceTransformInverse, d eviceLayerEdges.ToQuadF(), clipped);
670 DCHECK(!clipped); 671 DCHECK(!clipped);
671 672
672 setShaderOpacity(quad->opacity(), shaderAlphaLocation); 673 setShaderOpacity(quad->opacity(), shaderAlphaLocation);
673 setShaderQuadF(surfaceQuad, shaderQuadLocation); 674 setShaderQuadF(surfaceQuad, shaderQuadLocation);
674 drawQuadGeometry(frame, quad->quadTransform(), quad->rect, shaderMatrixLocat ion); 675 drawQuadGeometry(frame, quad->quadTransform(), quad->rect, shaderMatrixLocat ion);
675 676
676 // Flush the compositor context before the filter bitmap goes out of 677 // Flush the compositor context before the filter bitmap goes out of
677 // scope, so the draw gets processed before the filter texture gets deleted. 678 // scope, so the draw gets processed before the filter texture gets deleted.
678 if (filterBitmap.getTexture()) 679 if (filterBitmap.getTexture())
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 764
764 // Map to normalized texture coordinates. 765 // Map to normalized texture coordinates.
765 const gfx::Size& textureSize = quad->texture_size; 766 const gfx::Size& textureSize = quad->texture_size;
766 float fragmentTexTranslateX = clampTexRect.x() / textureSize.width(); 767 float fragmentTexTranslateX = clampTexRect.x() / textureSize.width();
767 float fragmentTexTranslateY = clampTexRect.y() / textureSize.height(); 768 float fragmentTexTranslateY = clampTexRect.y() / textureSize.height();
768 float fragmentTexScaleX = clampTexRect.width() / textureSize.width(); 769 float fragmentTexScaleX = clampTexRect.width() / textureSize.width();
769 float fragmentTexScaleY = clampTexRect.height() / textureSize.height(); 770 float fragmentTexScaleY = clampTexRect.height() / textureSize.height();
770 771
771 772
772 gfx::QuadF localQuad; 773 gfx::QuadF localQuad;
773 gfx::Transform deviceTransform = MathUtil::to2dTransform(frame.windowMatrix * frame.projectionMatrix * quad->quadTransform()); 774 gfx::Transform deviceTransform = frame.windowMatrix * frame.projectionMatrix * quad->quadTransform();
775 deviceTransform.FlattenTo2d();
774 if (!deviceTransform.IsInvertible()) 776 if (!deviceTransform.IsInvertible())
775 return; 777 return;
776 778
777 bool clipped = false; 779 bool clipped = false;
778 gfx::QuadF deviceLayerQuad = MathUtil::mapQuad(deviceTransform, gfx::QuadF(q uad->visibleContentRect()), clipped); 780 gfx::QuadF deviceLayerQuad = MathUtil::mapQuad(deviceTransform, gfx::QuadF(q uad->visibleContentRect()), clipped);
779 DCHECK(!clipped); 781 DCHECK(!clipped);
780 782
781 TileProgramUniforms uniforms; 783 TileProgramUniforms uniforms;
782 // For now, we simply skip anti-aliasing with the quad is clipped. This only happens 784 // For now, we simply skip anti-aliasing with the quad is clipped. This only happens
783 // on perspective transformed layers that go partially behind the camera. 785 // on perspective transformed layers that go partially behind the camera.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 856
855 float sign = gfx::QuadF(tileRect).IsCounterClockwise() ? -1 : 1; 857 float sign = gfx::QuadF(tileRect).IsCounterClockwise() ? -1 : 1;
856 bottomEdge.scale(sign); 858 bottomEdge.scale(sign);
857 leftEdge.scale(sign); 859 leftEdge.scale(sign);
858 topEdge.scale(sign); 860 topEdge.scale(sign);
859 rightEdge.scale(sign); 861 rightEdge.scale(sign);
860 862
861 // Create device space quad. 863 // Create device space quad.
862 LayerQuad deviceQuad(leftEdge, topEdge, rightEdge, bottomEdge); 864 LayerQuad deviceQuad(leftEdge, topEdge, rightEdge, bottomEdge);
863 865
864 // Map device space quad to local space. deviceTransform has no 3d compo nent since it was generated with to2dTransform() so we don't need to project. 866 // Map device space quad to local space. deviceTransform has no 3d compo nent since it was flattened, so we don't need to project.
865 // We should have already checked that the transform was uninvertible ab ove. 867 // We should have already checked that the transform was uninvertible ab ove.
866 gfx::Transform inverseDeviceTransform(gfx::Transform::kSkipInitializatio n); 868 gfx::Transform inverseDeviceTransform(gfx::Transform::kSkipInitializatio n);
867 bool didInvert = deviceTransform.GetInverse(&inverseDeviceTransform); 869 bool didInvert = deviceTransform.GetInverse(&inverseDeviceTransform);
868 DCHECK(didInvert); 870 DCHECK(didInvert);
869 localQuad = MathUtil::mapQuad(inverseDeviceTransform, deviceQuad.ToQuadF (), clipped); 871 localQuad = MathUtil::mapQuad(inverseDeviceTransform, deviceQuad.ToQuadF (), clipped);
870 872
871 // We should not DCHECK(!clipped) here, because anti-aliasing inflation may cause deviceQuad to become 873 // We should not DCHECK(!clipped) here, because anti-aliasing inflation may cause deviceQuad to become
872 // clipped. To our knowledge this scenario does not need to be handled d ifferently than the unclipped case. 874 // clipped. To our knowledge this scenario does not need to be handled d ifferently than the unclipped case.
873 } else { 875 } else {
874 // Move fragment shader transform to vertex shader. We can do this while 876 // Move fragment shader transform to vertex shader. We can do this while
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
1795 1797
1796 releaseRenderPassTextures(); 1798 releaseRenderPassTextures();
1797 } 1799 }
1798 1800
1799 bool GLRenderer::isContextLost() 1801 bool GLRenderer::isContextLost()
1800 { 1802 {
1801 return (m_context->getGraphicsResetStatusARB() != GL_NO_ERROR); 1803 return (m_context->getGraphicsResetStatusARB() != GL_NO_ERROR);
1802 } 1804 }
1803 1805
1804 } // namespace cc 1806 } // namespace cc
OLDNEW
« no previous file with comments | « cc/draw_quad_unittest.cc ('k') | cc/layer_sorter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698