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

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: Converted constructors to row-major input 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
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 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 } 511 }
512 512
513 void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua d* quad) 513 void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua d* quad)
514 { 514 {
515 CachedResource* contentsTexture = m_renderPassTextures.get(quad->render_pass _id); 515 CachedResource* contentsTexture = m_renderPassTextures.get(quad->render_pass _id);
516 if (!contentsTexture || !contentsTexture->id()) 516 if (!contentsTexture || !contentsTexture->id())
517 return; 517 return;
518 518
519 gfx::Transform quadRectMatrix; 519 gfx::Transform quadRectMatrix;
520 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->rect); 520 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->rect);
521 gfx::Transform contentsDeviceTransform = MathUtil::to2dTransform(frame.windo wMatrix * frame.projectionMatrix * quadRectMatrix); 521 gfx::Transform contentsDeviceTransform = frame.windowMatrix * frame.projecti onMatrix * quadRectMatrix;
522 contentsDeviceTransform.FlattenTo2d();
522 523
523 // Can only draw surface if device matrix is invertible. 524 // Can only draw surface if device matrix is invertible.
524 gfx::Transform contentsDeviceTransformInverse(gfx::Transform::kSkipInitializ ation); 525 gfx::Transform contentsDeviceTransformInverse(gfx::Transform::kSkipInitializ ation);
525 if (!contentsDeviceTransform.GetInverse(&contentsDeviceTransformInverse)) 526 if (!contentsDeviceTransform.GetInverse(&contentsDeviceTransformInverse))
526 return; 527 return;
527 528
528 scoped_ptr<ScopedResource> backgroundTexture = drawBackgroundFilters( 529 scoped_ptr<ScopedResource> backgroundTexture = drawBackgroundFilters(
529 frame, quad, contentsDeviceTransform, contentsDeviceTransformInverse); 530 frame, quad, contentsDeviceTransform, contentsDeviceTransformInverse);
530 531
531 // FIXME: Cache this value so that we don't have to do it for both the surfa ce and its replica. 532 // 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
657 GLC(context(), context()->activeTexture(GL_TEXTURE0)); 658 GLC(context(), context()->activeTexture(GL_TEXTURE0));
658 } 659 }
659 660
660 if (shaderEdgeLocation != -1) { 661 if (shaderEdgeLocation != -1) {
661 float edge[24]; 662 float edge[24];
662 deviceLayerEdges.toFloatArray(edge); 663 deviceLayerEdges.toFloatArray(edge);
663 deviceLayerBounds.toFloatArray(&edge[12]); 664 deviceLayerBounds.toFloatArray(&edge[12]);
664 GLC(context(), context()->uniform3fv(shaderEdgeLocation, 8, edge)); 665 GLC(context(), context()->uniform3fv(shaderEdgeLocation, 8, edge));
665 } 666 }
666 667
667 // 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. 668 // Map device space quad to surface space. contentsDeviceTransform has no 3d component since it was flattened, so we don't need to project.
668 gfx::QuadF surfaceQuad = MathUtil::mapQuad(contentsDeviceTransformInverse, d eviceLayerEdges.ToQuadF(), clipped); 669 gfx::QuadF surfaceQuad = MathUtil::mapQuad(contentsDeviceTransformInverse, d eviceLayerEdges.ToQuadF(), clipped);
669 DCHECK(!clipped); 670 DCHECK(!clipped);
670 671
671 setShaderOpacity(quad->opacity(), shaderAlphaLocation); 672 setShaderOpacity(quad->opacity(), shaderAlphaLocation);
672 setShaderQuadF(surfaceQuad, shaderQuadLocation); 673 setShaderQuadF(surfaceQuad, shaderQuadLocation);
673 drawQuadGeometry(frame, quad->quadTransform(), quad->rect, shaderMatrixLocat ion); 674 drawQuadGeometry(frame, quad->quadTransform(), quad->rect, shaderMatrixLocat ion);
674 675
675 // Flush the compositor context before the filter bitmap goes out of 676 // Flush the compositor context before the filter bitmap goes out of
676 // scope, so the draw gets processed before the filter texture gets deleted. 677 // scope, so the draw gets processed before the filter texture gets deleted.
677 if (filterBitmap.getTexture()) 678 if (filterBitmap.getTexture())
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 763
763 // Map to normalized texture coordinates. 764 // Map to normalized texture coordinates.
764 const gfx::Size& textureSize = quad->texture_size; 765 const gfx::Size& textureSize = quad->texture_size;
765 float fragmentTexTranslateX = clampTexRect.x() / textureSize.width(); 766 float fragmentTexTranslateX = clampTexRect.x() / textureSize.width();
766 float fragmentTexTranslateY = clampTexRect.y() / textureSize.height(); 767 float fragmentTexTranslateY = clampTexRect.y() / textureSize.height();
767 float fragmentTexScaleX = clampTexRect.width() / textureSize.width(); 768 float fragmentTexScaleX = clampTexRect.width() / textureSize.width();
768 float fragmentTexScaleY = clampTexRect.height() / textureSize.height(); 769 float fragmentTexScaleY = clampTexRect.height() / textureSize.height();
769 770
770 771
771 gfx::QuadF localQuad; 772 gfx::QuadF localQuad;
772 gfx::Transform deviceTransform = MathUtil::to2dTransform(frame.windowMatrix * frame.projectionMatrix * quad->quadTransform()); 773 gfx::Transform deviceTransform = frame.windowMatrix * frame.projectionMatrix * quad->quadTransform();
774 deviceTransform.FlattenTo2d();
773 if (!deviceTransform.IsInvertible()) 775 if (!deviceTransform.IsInvertible())
774 return; 776 return;
775 777
776 bool clipped = false; 778 bool clipped = false;
777 gfx::QuadF deviceLayerQuad = MathUtil::mapQuad(deviceTransform, gfx::QuadF(q uad->visibleContentRect()), clipped); 779 gfx::QuadF deviceLayerQuad = MathUtil::mapQuad(deviceTransform, gfx::QuadF(q uad->visibleContentRect()), clipped);
778 DCHECK(!clipped); 780 DCHECK(!clipped);
779 781
780 TileProgramUniforms uniforms; 782 TileProgramUniforms uniforms;
781 // For now, we simply skip anti-aliasing with the quad is clipped. This only happens 783 // For now, we simply skip anti-aliasing with the quad is clipped. This only happens
782 // on perspective transformed layers that go partially behind the camera. 784 // on perspective transformed layers that go partially behind the camera.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 855
854 float sign = gfx::QuadF(tileRect).IsCounterClockwise() ? -1 : 1; 856 float sign = gfx::QuadF(tileRect).IsCounterClockwise() ? -1 : 1;
855 bottomEdge.scale(sign); 857 bottomEdge.scale(sign);
856 leftEdge.scale(sign); 858 leftEdge.scale(sign);
857 topEdge.scale(sign); 859 topEdge.scale(sign);
858 rightEdge.scale(sign); 860 rightEdge.scale(sign);
859 861
860 // Create device space quad. 862 // Create device space quad.
861 LayerQuad deviceQuad(leftEdge, topEdge, rightEdge, bottomEdge); 863 LayerQuad deviceQuad(leftEdge, topEdge, rightEdge, bottomEdge);
862 864
863 // 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. 865 // Map device space quad to local space. deviceTransform has no 3d compo nent since it was flattened, so we don't need to project.
864 // We should have already checked that the transform was uninvertible ab ove. 866 // We should have already checked that the transform was uninvertible ab ove.
865 gfx::Transform inverseDeviceTransform(gfx::Transform::kSkipInitializatio n); 867 gfx::Transform inverseDeviceTransform(gfx::Transform::kSkipInitializatio n);
866 bool didInvert = deviceTransform.GetInverse(&inverseDeviceTransform); 868 bool didInvert = deviceTransform.GetInverse(&inverseDeviceTransform);
867 DCHECK(didInvert); 869 DCHECK(didInvert);
868 localQuad = MathUtil::mapQuad(inverseDeviceTransform, deviceQuad.ToQuadF (), clipped); 870 localQuad = MathUtil::mapQuad(inverseDeviceTransform, deviceQuad.ToQuadF (), clipped);
869 871
870 // We should not DCHECK(!clipped) here, because anti-aliasing inflation may cause deviceQuad to become 872 // We should not DCHECK(!clipped) here, because anti-aliasing inflation may cause deviceQuad to become
871 // clipped. To our knowledge this scenario does not need to be handled d ifferently than the unclipped case. 873 // clipped. To our knowledge this scenario does not need to be handled d ifferently than the unclipped case.
872 } else { 874 } else {
873 // Move fragment shader transform to vertex shader. We can do this while 875 // Move fragment shader transform to vertex shader. We can do this while
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
1794 1796
1795 releaseRenderPassTextures(); 1797 releaseRenderPassTextures();
1796 } 1798 }
1797 1799
1798 bool GLRenderer::isContextLost() 1800 bool GLRenderer::isContextLost()
1799 { 1801 {
1800 return (m_context->getGraphicsResetStatusARB() != GL_NO_ERROR); 1802 return (m_context->getGraphicsResetStatusARB() != GL_NO_ERROR);
1801 } 1803 }
1802 1804
1803 } // namespace cc 1805 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698