Changeset 90646 in webkit
- Timestamp:
- Jul 8, 2011 11:33:00 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r90642 r90646 1 2011-07-08 David Reveman <reveman@chromium.org> 2 3 Reviewed by Stephen White. 4 5 [Chromium] Edge anti-aliasing for composited layers. 6 https://bugs.webkit.org/show_bug.cgi?id=61388 7 8 * platform/chromium/compositing/tiny-layer-rotated-expected.png: Added. 9 * platform/chromium/compositing/tiny-layer-rotated-expected.txt: Added. 10 * platform/chromium/compositing/tiny-layer-rotated.html: Added. 11 * platform/chromium/test_expectations.txt: 12 1 13 2011-07-08 Mihnea Ovidenie <mihnea@adobe.com> 2 14 -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r90609 r90646 2967 2967 2968 2968 // Chromium GPU draws scrollbars slightly differently in debug vs. release. 2969 BUGWK58587 DEBUG GPU LINUX : compositing/direct-image-compositing.html = IMAGE 2970 BUGWK58587 DEBUG GPU LINUX : compositing/geometry/horizontal-scroll-composited.html = IMAGE 2971 BUGWK58587 DEBUG GPU LINUX : compositing/geometry/tall-page-composited.html = IMAGE 2972 BUGWK58587 DEBUG GPU LINUX : compositing/geometry/video-fixed-scrolling.html = IMAGE 2973 BUGWK58587 DEBUG GPU LINUX : media/video-zoom.html = IMAGE 2969 // Commented because of BUGWK61388 2970 //BUGWK58587 DEBUG GPU LINUX : compositing/direct-image-compositing.html = IMAGE 2971 //BUGWK58587 DEBUG GPU LINUX : compositing/geometry/horizontal-scroll-composited.html = IMAGE 2972 //BUGWK58587 DEBUG GPU LINUX : compositing/geometry/tall-page-composited.html = IMAGE 2973 //BUGWK58587 DEBUG GPU LINUX : compositing/geometry/video-fixed-scrolling.html = IMAGE 2974 //BUGWK58587 DEBUG GPU LINUX : media/video-zoom.html = IMAGE 2974 2975 2975 2976 // WebKit roll 80564:80631: rendering on Leopard is shifted to the top right … … 3295 3296 3296 3297 BUGWK58308 GPU WIN LINUX DEBUG : compositing/z-order/negative-z-index.html = PASS CRASH 3297 BUGWK58328 GPU WIN MAC LINUX DEBUG : compositing/webgl/webgl-reflection.html = IMAGE PASS CRASH 3298 // Commented because of BUGWK61388 3299 //BUGWK58328 GPU WIN MAC LINUX DEBUG : compositing/webgl/webgl-reflection.html = IMAGE PASS CRASH 3298 3300 3299 3301 BUGCR79173 GPU LINUX DEBUG : fast/canvas/access-zero-sized-canvas.html = PASS CRASH … … 3453 3455 BUGWK60097 DEBUG : fast/dom/HTMLLinkElement/link-and-subresource-test.html = TEXT PASS 3454 3456 3455 BUGWK60102 LINUX DEBUG GPU : compositing/geometry/fixed-in-composited.html = IMAGE 3457 // Commented because of BUGWK61388 3458 //BUGWK60102 LINUX DEBUG GPU : compositing/geometry/fixed-in-composited.html = IMAGE 3456 3459 BUGWK60102 LINUX GPU : compositing/masks/masked-ancestor.html = IMAGE 3457 BUGWK60102 LINUX DEBUG GPU : compositing/masks/simple-composited-mask.html = IMAGE 3460 // Commented because of BUGWK61388 3461 //BUGWK60102 LINUX DEBUG GPU : compositing/masks/simple-composited-mask.html = IMAGE 3458 3462 3459 3463 // Looks like some uninitialized memory at the bottom. … … 3916 3920 3917 3921 // Started failing at WebKit r90259-90261. 3918 BUGCR88400 GPU : compositing/geometry/vertical-scroll-composited.html = IMAGE 3922 // Commented because of BUGWK61388 3923 //BUGCR88400 GPU : compositing/geometry/vertical-scroll-composited.html = IMAGE 3919 3924 BUGCR88400 GPU : compositing/overflow/overflow-scroll.html = IMAGE 3920 3925 … … 3954 3959 BUGCR88577 WIN LINUX GPU : canvas/philip/tests/2d.pattern.repeat.null.html = TEXT 3955 3960 BUGCR88577 WIN LINUX GPU : fast/canvas/canvas-pattern-behaviour.html = TEXT 3961 3962 BUGWK61388 GPU : compositing/color-matching/image-color-matching.html = IMAGE 3963 BUGWK61388 GPU : compositing/direct-image-compositing.html = IMAGE 3964 BUGWK61388 GPU : compositing/geometry/fixed-in-composited.html = IMAGE 3965 BUGWK61388 GPU : compositing/geometry/fixed-position.html = IMAGE 3966 BUGWK61388 GPU : compositing/geometry/horizontal-scroll-composited.html = IMAGE 3967 BUGWK61388 GPU : compositing/geometry/layer-due-to-layer-children-deep.html = IMAGE 3968 BUGWK61388 GPU : compositing/geometry/layer-due-to-layer-children.html = IMAGE 3969 BUGWK61388 GPU : compositing/geometry/tall-page-composited.html = IMAGE 3970 BUGWK61388 GPU : compositing/geometry/video-fixed-scrolling.html = IMAGE 3971 BUGWK61388 GPU : compositing/geometry/vertical-scroll-composited.html = IMAGE 3972 BUGWK61388 GPU : compositing/geometry/video-opacity-overlay.html = IMAGE 3973 BUGWK61388 GPU : compositing/iframes/nested-iframe-scrolling.html = IMAGE 3974 BUGWK61388 GPU : compositing/masks/direct-image-mask.html = IMAGE 3975 BUGWK61388 GPU : compositing/masks/simple-composited-mask.html = IMAGE 3976 BUGWK61388 GPU : compositing/overflow/fixed-position-ancestor-clip.html = IMAGE 3977 BUGWK61388 GPU : compositing/reflections/deeply-nested-reflections.html = IMAGE 3978 BUGWK61388 GPU : compositing/reflections/nested-reflection-on-overflow.html = IMAGE 3979 BUGWK61388 GPU : compositing/reflections/nested-reflection-transformed.html = IMAGE 3980 BUGWK61388 GPU : compositing/reflections/nested-reflection-transformed2.html = IMAGE 3981 BUGWK61388 GPU : compositing/reflections/nested-reflection-transition.html = IMAGE 3982 BUGWK61388 GPU : compositing/reflections/reflection-in-composited.html = IMAGE 3983 BUGWK61388 GPU : compositing/reflections/reflection-on-composited.html = IMAGE 3984 BUGWK61388 GPU : compositing/reflections/reflection-ordering.html = IMAGE 3985 BUGWK61388 GPU : compositing/reflections/reflection-positioning.html = IMAGE 3986 BUGWK61388 GPU : compositing/reflections/reflection-positioning2.html = IMAGE 3987 BUGWK61388 GPU : compositing/reflections/simple-composited-reflections.html = IMAGE 3988 BUGWK61388 GPU : compositing/reflections/transform-inside-reflection.html = IMAGE 3989 BUGWK61388 GPU : compositing/rtl/rtl-iframe-absolute-overflow.html = IMAGE 3990 BUGWK61388 GPU : compositing/rtl/rtl-iframe-fixed-overflow.html = IMAGE 3991 BUGWK61388 GPU : compositing/shadows/shadow-drawing.html = IMAGE 3992 BUGWK61388 GPU : compositing/text-on-large-layer.html = IMAGE 3993 BUGWK61388 GPU : compositing/transitions/scale-transition-no-start.html = IMAGE 3994 BUGWK61388 GPU : compositing/webgl/webgl-reflection.html = IMAGE 3995 BUGWK61388 GPU : platform/chromium/compositing/huge-layer-rotated.html = IMAGE 3996 BUGWK61388 GPU : platform/chromium/compositing/backface-visibility-transformed.html = IMAGE 3997 BUGWK61388 GPU : media/video-zoom.html = IMAGE 3998 BUGWK61388 GPU : media/video-zoom-controls.html = IMAGE 3999 BUGWK61388 GPU : media/video-transformed.html = IMAGE 4000 BUGWK61388 GPU : media/video-layer-crash.html = IMAGE -
trunk/Source/WebCore/ChangeLog
r90645 r90646 1 2011-07-08 David Reveman <reveman@chromium.org> 2 3 Reviewed by Stephen White. 4 5 [Chromium] Edge anti-aliasing for composited layers. 6 https://bugs.webkit.org/show_bug.cgi?id=61388 7 8 Add transparent outer border to tiled layers and adjust vertex 9 coordinates so that use of a bilinear filter creates a smooth 10 layer edge. 11 12 Tests: platform/chromium/compositing/tiny-layer-rotated.html 13 platform/chromium/compositing/huge-layer-rotated.html (existing) 14 TilingDataTest in webkit_unit_tests 15 16 * platform/graphics/chromium/ContentLayerChromium.cpp: 17 Change maxUntiledSize to 510 to ensure that tiles are not greater 18 than 512 with outer borders. 19 (WebCore::ContentLayerChromium::updateLayerSize): We can't use the 20 layer size as tile size when we want to avoid tiling as this will 21 not be enough space to include possible outer borders. We instead use 22 an empty size, which allows the tiler to automatically adjust the 23 tile size to be large enough for the layer to fit in one tile. 24 (WebCore::ContentLayerChromium::createTilerIfNeeded): 25 (WebCore::ContentLayerChromium::setIsMask): Don't use border texels 26 for layer used as mask. 27 28 * platform/graphics/chromium/ContentLayerChromium.h: 29 (WebCore::ContentLayerChromium::m_borderTexels) Added. 30 31 * platform/graphics/chromium/LayerTilerChromium.cpp: 32 (WebCore::LayerTilerChromium::tileTexRect): Added. 33 (WebCore::LayerTilerChromium::tileLayerRect): m_tileSize is no 34 longer the correct layer size. Size of bounds with border should 35 be the correct layer size. 36 (WebCore::LayerTilerChromium::growLayerToContain): Adjust texture 37 size to include outer borders and handle empty m_tileSize. 38 (WebCore::LayerTilerChromium::invalidateRect): Use size of rectangle 39 returned by tileTexRect instead of m_tileSize for texture size. 40 (WebCore::LayerTilerChromium::prepareToUpdate): Ditto. 41 (WebCore::LayerTilerChromium::draw): Compute and intersect tile edges 42 instead of using tile coordinates directly. Edges are adjusted to 43 include outer borders and make sure all partially covered pixels are 44 processed. 45 (WebCore::LayerTilerChromium::drawTexturedQuad): Pass quad to 46 shader using point uniform. 47 (WebCore::LayerTilerChromium::invalidateRect): Invalidate old layer 48 area to clear any contents left from previous layer size. 49 50 * platform/graphics/chromium/LayerTilerChromium.h: 51 (WebCore::LayerTilerChromium::tileTexRect) Added. 52 (WebCore::LayerTilerChromium::drawTexturedQuad): Add quad parameter. 53 54 * platform/graphics/chromium/ShaderChromium.cpp: 55 (WebCore::VertexShaderPosTexTransform::getShaderString) Get X/Y vertex 56 components from point uniform. 57 (WebCore::VertexShaderPosTexTransform::VertexShaderPosTexTransform) 58 Added point uniform. 59 (WebCore::VertexShaderPosTexTransform::init) Ditto. 60 (WebCore::VertexShaderPosTexTransform::pointLocation) Added. 61 62 * platform/graphics/chromium/ShaderChromium.h: 63 (WebCore::VertexShaderPosTexTransform::pointLocation) Added. 64 65 * platform/graphics/gpu/TilingData.cpp: 66 (WebCore::TilingData::tileBoundsWithOuterBorder): Added. 67 (WebCore::TilingData::computeNumTiles): Adjust for outer border. 68 (WebCore::TilingData::tileXIndexFromSrcCoord): Ditto. 69 (WebCore::TilingData::tileYIndexFromSrcCoord): Ditto. 70 (WebCore::TilingData::tileSizeX): Ditto. 71 (WebCore::TilingData::tileSizeY): Ditto. 72 (WebCore::TilingData::intersectDrawQuad): Ditto. 73 (WebCore::TilingData::textureOffset): Ditto. 74 75 * platform/graphics/gpu/TilingData.h: 76 (WebCore::TilingData::tileBoundsWithOuterBorder): Added. 77 1 78 2011-07-08 Mike Reed <reed@google.com> 2 79 -
trunk/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
r90492 r90646 48 48 49 49 // Start tiling when the width and height of a layer are larger than this size. 50 static int maxUntiledSize = 51 2;50 static int maxUntiledSize = 510; 51 51 52 52 // When tiling is enabled, use tiles of this dimension squared. … … 93 93 : LayerChromium(owner) 94 94 , m_tilingOption(ContentLayerChromium::AutoTile) 95 , m_borderTexels(true) 95 96 { 96 97 } … … 175 176 return; 176 177 177 const IntSize tileSize( min(defaultTileSize, contentBounds().width()), min(defaultTileSize, contentBounds().height()));178 const IntSize tileSize(defaultTileSize, defaultTileSize); 178 179 179 180 // Tile if both dimensions large, or any one dimension large and the other … … 192 193 isTiled = autoTiled; 193 194 194 IntSize requestedSize = isTiled ? tileSize : contentBounds(); 195 // Empty tile size tells the tiler to avoid tiling. 196 IntSize requestedSize = isTiled ? tileSize : IntSize(); 195 197 const int maxSize = layerRenderer()->maxTextureSize(); 196 198 IntSize clampedSize = requestedSize.shrunkTo(IntSize(maxSize, maxSize)); … … 229 231 layerRenderer(), 230 232 IntSize(defaultTileSize, defaultTileSize), 231 LayerTilerChromium::HasBorderTexels); 233 m_borderTexels ? LayerTilerChromium::HasBorderTexels : 234 LayerTilerChromium::NoBorderTexels); 232 235 } 233 236 … … 257 260 void ContentLayerChromium::setIsMask(bool isMask) 258 261 { 262 m_borderTexels = false; 259 263 setTilingOption(isMask ? NeverTile : AutoTile); 260 264 } -
trunk/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.h
r90492 r90646 82 82 OwnPtr<LayerTilerChromium> m_tiler; 83 83 TilingOption m_tilingOption; 84 bool m_borderTexels; 84 85 }; 85 86 -
trunk/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp
r90505 r90646 32 32 33 33 #include "Extensions3DChromium.h" 34 #include "FloatQuad.h" 34 35 #include "GraphicsContext.h" 35 36 #include "GraphicsContext3D.h" … … 44 45 namespace WebCore { 45 46 47 typedef FloatPoint3D Edge; 48 46 49 PassOwnPtr<LayerTilerChromium> LayerTilerChromium::create(LayerRendererChromium* layerRenderer, const IntSize& tileSize, BorderTexelOption border) 47 50 { … … 80 83 81 84 m_tileSize = size; 82 m_tilingData.setMaxTextureSize(max(size.width(), size.height()));83 85 } 84 86 … … 186 188 { 187 189 const int index = m_tilingData.tileIndex(tile->i(), tile->j()); 188 IntRect layerRect = m_tilingData.tileBoundsWithBorder(index); 189 layerRect.setSize(m_tileSize); 190 return layerRect; 190 return m_tilingData.tileBoundsWithBorder(index); 191 } 192 193 IntRect LayerTilerChromium::tileTexRect(const Tile* tile) const 194 { 195 const int index = m_tilingData.tileIndex(tile->i(), tile->j()); 196 return m_tilingData.tileBoundsWithOuterBorder(index); 191 197 } 192 198 … … 195 201 if (contentRect.isEmpty() || m_skipsDraw) 196 202 return; 203 204 IntSize oldLayerSize(m_tilingData.totalSizeX(), m_tilingData.totalSizeY()); 205 const IntRect oldLayerRect = IntRect(IntPoint(), oldLayerSize); 197 206 198 207 growLayerToContain(contentRect); … … 212 221 bound.intersect(layerRect); 213 222 tile->m_dirtyLayerRect.unite(bound); 223 224 // Invalidate old layer area to clear any contents left from 225 // previous layer size. 226 IntRect oldBound = tileLayerRect(tile); 227 oldBound.intersect(oldLayerRect); 228 tile->m_dirtyLayerRect.unite(oldBound); 214 229 } 215 230 } … … 268 283 // the dirty regions currently being drawn. 269 284 IntRect dirtyLayerRect; 285 IntSize tileSize; 270 286 int left, top, right, bottom; 271 287 contentRectToTileIndices(contentRect, left, top, right, bottom); … … 275 291 if (!tile) 276 292 tile = createTile(i, j); 277 if (!tile->texture()->isValid(m_tileSize, m_textureFormat)) 293 294 IntSize texSize = tileTexRect(tile).size(); 295 if (!tile->texture()->isValid(texSize, m_textureFormat)) 278 296 tile->m_dirtyLayerRect = tileLayerRect(tile); 279 297 280 if (!tile->texture()->reserve( m_tileSize, m_textureFormat)) {298 if (!tile->texture()->reserve(texSize, m_textureFormat)) { 281 299 m_skipsDraw = true; 282 300 reset(); … … 285 303 286 304 dirtyLayerRect.unite(tile->m_dirtyLayerRect); 305 306 tileSize = tileSize.expandedTo(texSize); 287 307 } 288 308 } … … 297 317 return; 298 318 299 textureUpdater->prepareToUpdate(m_paintRect, m_tileSize, m_tilingData.borderTexels());319 textureUpdater->prepareToUpdate(m_paintRect, tileSize, m_tilingData.borderTexels()); 300 320 } 301 321 … … 320 340 // Calculate page-space rectangle to copy from. 321 341 IntRect sourceRect = tileContentRect(tile); 322 const IntPoint anchor = sourceRect.location(); 342 IntRect texRect = tileTexRect(tile); 343 const IntPoint anchor = texRect.location(); 323 344 sourceRect.intersect(layerRectToContentRect(tile->m_dirtyLayerRect)); 324 345 // Paint rect not guaranteed to line up on tile boundaries, so … … 387 408 IntRect layerRect = contentRectToLayerRect(contentRect); 388 409 IntSize rectSize = IntSize(layerRect.maxX(), layerRect.maxY()); 389 410 IntSize texSize = m_tileSize; 411 412 // Use rect with border texels as max texture size when tile size 413 // has not been specified. 414 if (texSize.isEmpty()) { 415 texSize = rectSize; 416 if (m_tilingData.borderTexels()) 417 texSize.expand(2, 2); 418 } 419 420 m_tilingData.setMaxTextureSize(max(texSize.width(), texSize.height())); 390 421 IntSize oldLayerSize(m_tilingData.totalSizeX(), m_tilingData.totalSizeY()); 391 422 IntSize newSize = rectSize.expandedTo(oldLayerSize); 392 423 m_tilingData.setTotalSize(newSize.width(), newSize.height()); 424 } 425 426 static bool isCCW(const FloatQuad& quad) 427 { 428 FloatPoint v1 = FloatPoint(quad.p2().x() - quad.p1().x(), 429 quad.p2().y() - quad.p1().y()); 430 FloatPoint v2 = FloatPoint(quad.p3().x() - quad.p2().x(), 431 quad.p3().y() - quad.p2().y()); 432 return (v1.x() * v2.y() - v1.y() * v2.x()) < 0; 433 } 434 435 static Edge computeEdge(const FloatPoint& p, const FloatPoint& q, float sign) 436 { 437 ASSERT(p != q); 438 439 FloatPoint tangent(p.y() - q.y(), q.x() - p.x()); 440 float scale = sign / tangent.length(); 441 float cross2 = p.x() * q.y() - q.x() * p.y(); 442 443 return Edge(tangent.x() * scale, 444 tangent.y() * scale, 445 cross2 * scale); 446 } 447 448 static FloatPoint intersect(const Edge& a, const Edge& b) 449 { 450 return FloatPoint( 451 (a.y() * b.z() - b.y() * a.z()) / (a.x() * b.y() - b.x() * a.y()), 452 (a.x() * b.z() - b.x() * a.z()) / (b.x() * a.y() - a.x() * b.y())); 393 453 } 394 454 … … 401 461 GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0)); 402 462 463 TransformationMatrix matrix(globalTransform); 464 465 // We don't care about Z component. 466 TransformationMatrix matrixXYW = 467 TransformationMatrix(matrix.m11(), matrix.m12(), 0, matrix.m14(), 468 matrix.m21(), matrix.m22(), 0, matrix.m24(), 469 matrix.m31(), matrix.m32(), 1, matrix.m34(), 470 matrix.m41(), matrix.m42(), 0, matrix.m44()); 471 472 // Don't draw any tiles when matrix is not invertible. 473 if (!matrixXYW.isInvertible()) 474 return; 475 476 TransformationMatrix inverse = matrixXYW.inverse(); 477 IntRect bounds(m_layerPosition, IntSize(m_tilingData.totalSizeX(), 478 m_tilingData.totalSizeY())); 479 480 // Include outer border texels in bounds. 481 bounds.inflate(m_tilingData.borderTexels()); 482 483 // Map bounds to device space. 484 FloatQuad boundsQuad = matrix.mapQuad(FloatQuad(bounds)); 485 486 // Counter-clockwise? 487 float sign = isCCW(boundsQuad) ? -1 : 1; 488 489 // Compute outer edges. 490 Edge leftEdge = computeEdge(boundsQuad.p4(), boundsQuad.p1(), sign); 491 Edge rightEdge = computeEdge(boundsQuad.p2(), boundsQuad.p3(), sign); 492 Edge topEdge = computeEdge(boundsQuad.p1(), boundsQuad.p2(), sign); 493 Edge bottomEdge = computeEdge(boundsQuad.p3(), boundsQuad.p4(), sign); 494 495 // Move outer edges to ensure that all partially covered pixels are 496 // processed. 497 float zDistance = m_tilingData.borderTexels() * 0.5f; 498 leftEdge.move(0, 0, zDistance); 499 rightEdge.move(0, 0, zDistance); 500 topEdge.move(0, 0, zDistance); 501 bottomEdge.move(0, 0, zDistance); 502 503 Edge prevEdgeY = topEdge; 504 403 505 int left, top, right, bottom; 404 506 contentRectToTileIndices(contentRect, left, top, right, bottom); 405 IntRect layerRect = contentRectToLayerRect(contentRect);406 507 for (int j = top; j <= bottom; ++j) { 508 Edge prevEdgeX = leftEdge; 509 510 Edge edgeY = bottomEdge; 511 if (j < (m_tilingData.numTilesY() - 1)) { 512 IntRect tileRect = m_tilingData.tileBounds(m_tilingData.tileIndex(0, j)); 513 tileRect.move(m_layerPosition.x(), m_layerPosition.y()); 514 515 FloatPoint p1(tileRect.maxX(), tileRect.maxY()); 516 FloatPoint p2(tileRect.x(), tileRect.maxY()); 517 518 // Map points to device space. 519 p1 = matrix.mapPoint(p1); 520 p2 = matrix.mapPoint(p2); 521 522 // Compute horizontal edge. 523 edgeY = computeEdge(p1, p2, sign); 524 } 525 407 526 for (int i = left; i <= right; ++i) { 408 527 Tile* tile = tileAt(i, j); … … 414 533 tile->texture()->bindTexture(); 415 534 416 TransformationMatrix tileMatrix(globalTransform);417 418 535 // Don't use tileContentRect here, as that contains the full 419 536 // rect with border texels which shouldn't be drawn. 420 537 IntRect tileRect = m_tilingData.tileBounds(m_tilingData.tileIndex(tile->i(), tile->j())); 421 IntRect displayRect = tileRect;422 tileRect.intersect(layerRect);423 // Keep track of how the top left has moved, so the texture can be424 // offset the same amount.425 IntSize offset = tileRect.minXMinYCorner() - displayRect.minXMinYCorner();426 538 tileRect.move(m_layerPosition.x(), m_layerPosition.y()); 427 tileMatrix.translate3d(tileRect.x() + tileRect.width() / 2.0, tileRect.y() + tileRect.height() / 2.0, 0); 428 429 Int Point texOffset = m_tilingData.textureOffset(tile->i(), tile->j()) + offset;430 float tileWidth = static_cast<float>( m_tileSize.width());431 float tileHeight = static_cast<float>( m_tileSize.height());432 float texTranslateX = texOffset.x() / tileWidth;433 float texTranslateY = texOffset.y() / tileHeight;539 540 IntPoint texOffset = m_tilingData.textureOffset(tile->i(), tile->j()); 541 IntRect texRect = tileTexRect(tile); 542 float tileWidth = static_cast<float>(texRect.width()); 543 float tileHeight = static_cast<float>(texRect.height()); 544 float texTranslateX = (texOffset.x() - tileRect.x()) / tileWidth; 545 float texTranslateY = (texOffset.y() - tileRect.y()) / tileHeight; 434 546 float texScaleX = tileRect.width() / tileWidth; 435 547 float texScaleY = tileRect.height() / tileHeight; … … 440 552 texScaleY *= -1.0; 441 553 } 442 drawTexturedQuad(context, layerRenderer()->projectionMatrix(), tileMatrix, tileRect.width(), tileRect.height(), opacity, texTranslateX, texTranslateY, texScaleX, texScaleY, program); 554 555 Edge edgeX = rightEdge; 556 if (i < (m_tilingData.numTilesX() - 1)) { 557 FloatPoint p1(tileRect.maxX(), tileRect.y()); 558 FloatPoint p2(tileRect.maxX(), tileRect.maxY()); 559 560 // Map points to device space. 561 p1 = matrix.mapPoint(p1); 562 p2 = matrix.mapPoint(p2); 563 564 // Compute vertical edge. 565 edgeX = computeEdge(p1, p2, sign); 566 } 567 568 // Create device space quad. 569 FloatQuad deviceQuad(intersect(edgeY, prevEdgeX), 570 intersect(prevEdgeX, prevEdgeY), 571 intersect(prevEdgeY, edgeX), 572 intersect(edgeX, edgeY)); 573 574 // Map quad to layer space. 575 FloatQuad quad = inverse.mapQuad(deviceQuad); 576 577 // Normalize to tileRect. 578 quad.scale(1.0f / tileRect.width(), 1.0f / tileRect.height()); 579 580 drawTexturedQuad(context, quad, layerRenderer()->projectionMatrix(), matrix, tileRect.width(), tileRect.height(), opacity, texTranslateX, texTranslateY, texScaleX, texScaleY, program); 581 582 prevEdgeX = edgeX; 443 583 } 584 585 prevEdgeY = edgeY; 444 586 } 445 587 } 446 588 447 589 template <class T> 448 void LayerTilerChromium::drawTexturedQuad(GraphicsContext3D* context, const TransformationMatrix& projectionMatrix, const TransformationMatrix& drawMatrix,590 void LayerTilerChromium::drawTexturedQuad(GraphicsContext3D* context, const FloatQuad& quad, const TransformationMatrix& projectionMatrix, const TransformationMatrix& drawMatrix, 449 591 float width, float height, float opacity, 450 592 float texTranslateX, float texTranslateY, … … 469 611 texTranslateX, texTranslateY, texScaleX, texScaleY)); 470 612 613 float point[8]; 614 point[0] = quad.p1().x(); 615 point[1] = quad.p1().y(); 616 point[2] = quad.p2().x(); 617 point[3] = quad.p2().y(); 618 point[4] = quad.p3().x(); 619 point[5] = quad.p3().y(); 620 point[6] = quad.p4().x(); 621 point[7] = quad.p4().y(); 622 GLC(context, context->uniform2fv(program->vertexShader().pointLocation(), point, 4)); 623 471 624 GLC(context, context->drawElements(GraphicsContext3D::TRIANGLES, 6, GraphicsContext3D::UNSIGNED_SHORT, 0)); 472 625 } -
trunk/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h
r90505 r90646 113 113 114 114 template <class T> 115 void drawTexturedQuad(GraphicsContext3D*, const TransformationMatrix& projectionMatrix, const TransformationMatrix& drawMatrix,115 void drawTexturedQuad(GraphicsContext3D*, const FloatQuad&, const TransformationMatrix& projectionMatrix, const TransformationMatrix& drawMatrix, 116 116 float width, float height, float opacity, 117 117 float texTranslateX, float texTranslateY, … … 135 135 IntRect tileContentRect(const Tile*) const; 136 136 IntRect tileLayerRect(const Tile*) const; 137 IntRect tileTexRect(const Tile*) const; 137 138 138 139 GC3Denum m_textureFormat; -
trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp
r89634 r90646 125 125 : m_matrixLocation(-1) 126 126 , m_texTransformLocation(-1) 127 , m_pointLocation(-1) 127 128 { 128 129 } … … 132 133 m_matrixLocation = context->getUniformLocation(program, "matrix"); 133 134 m_texTransformLocation = context->getUniformLocation(program, "texTransform"); 134 ASSERT(m_matrixLocation != -1 && m_texTransformLocation != -1); 135 m_pointLocation = context->getUniformLocation(program, "point"); 136 ASSERT(m_matrixLocation != -1 && m_texTransformLocation != -1 && m_pointLocation != -1); 135 137 } 136 138 … … 142 144 uniform mat4 matrix; 143 145 uniform vec4 texTransform; 144 varying vec2 v_texCoord; 145 void main() 146 { 147 gl_Position = matrix * a_position; 148 v_texCoord = a_texCoord * texTransform.zw + texTransform.xy; 146 uniform vec2 point[4]; 147 varying vec2 v_texCoord; 148 void main() 149 { 150 vec2 complement = abs(a_texCoord - 1.0); 151 vec4 pos = vec4(0.0, 0.0, a_position.z, a_position.w); 152 pos.xy += (complement.x * complement.y) * point[0]; 153 pos.xy += (a_texCoord.x * complement.y) * point[1]; 154 pos.xy += (a_texCoord.x * a_texCoord.y) * point[2]; 155 pos.xy += (complement.x * a_texCoord.y) * point[3]; 156 gl_Position = matrix * pos; 157 v_texCoord = pos.xy * texTransform.zw + texTransform.xy; 149 158 } 150 159 ); -
trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.h
r89634 r90646 91 91 int matrixLocation() const { return m_matrixLocation; } 92 92 int texTransformLocation() const { return m_texTransformLocation; } 93 int pointLocation() const { return m_pointLocation; } 93 94 94 95 private: 95 96 int m_matrixLocation; 96 97 int m_texTransformLocation; 98 int m_pointLocation; 97 99 }; 98 100 -
trunk/Source/WebCore/platform/graphics/gpu/TilingData.cpp
r87748 r90646 45 45 static int computeNumTiles(int maxTextureSize, int totalSize, int borderTexels) 46 46 { 47 int totalSizeWithBorder = totalSize + 2 * borderTexels; 48 47 49 if (maxTextureSize - 2 * borderTexels <= 0) 48 return totalSize > 0 && maxTextureSize >= totalSize ? 1 :0;49 50 int numTiles = max(1, 1 + (totalSize - 1 - 2 * borderTexels) / (maxTextureSize - 2 * borderTexels));50 return 0; 51 52 int numTiles = max(1, 1 + (totalSizeWithBorder - 1 - 2 * borderTexels) / (maxTextureSize - 2 * borderTexels)); 51 53 return totalSize > 0 ? numTiles : 0; 52 54 } … … 80 82 81 83 ASSERT(m_maxTextureSize - 2 * m_borderTexels); 82 int x = (srcPos - m_borderTexels)/ (m_maxTextureSize - 2 * m_borderTexels);84 int x = srcPos / (m_maxTextureSize - 2 * m_borderTexels); 83 85 return min(max(x, 0), numTilesX() - 1); 84 86 } … … 90 92 91 93 ASSERT(m_maxTextureSize - 2 * m_borderTexels); 92 int y = (srcPos - m_borderTexels)/ (m_maxTextureSize - 2 * m_borderTexels);94 int y = srcPos / (m_maxTextureSize - 2 * m_borderTexels); 93 95 return min(max(y, 0), numTilesY() - 1); 94 96 } … … 133 135 } 134 136 137 IntRect TilingData::tileBoundsWithOuterBorder(int tile) const 138 { 139 IntRect bounds = tileBounds(tile); 140 141 if (m_borderTexels) 142 bounds.inflate(1); 143 144 return bounds; 145 } 146 135 147 FloatRect TilingData::tileBoundsNormalized(int tile) const 136 148 { … … 169 181 if (!xIndex && m_numTilesX == 1) 170 182 return m_totalSizeX; 171 if (!xIndex && m_numTilesX > 1)172 return m_maxTextureSize - m_borderTexels;173 183 if (xIndex < numTilesX() - 1) 174 184 return m_maxTextureSize - 2 * m_borderTexels; … … 186 196 if (!yIndex && m_numTilesY == 1) 187 197 return m_totalSizeY; 188 if (!yIndex && m_numTilesY > 1)189 return m_maxTextureSize - m_borderTexels;190 198 if (yIndex < numTilesY() - 1) 191 199 return m_maxTextureSize - 2 * m_borderTexels; … … 231 239 *newSrc = srcRectIntersected; 232 240 newSrc->move( 233 -tileBounds.x() + ((tileXIndex(tile) > 0) ? m_borderTexels : 0),234 -tileBounds.y() + ((tileYIndex(tile) > 0) ? m_borderTexels : 0));241 -tileBounds.x() + m_borderTexels, 242 -tileBounds.y() + m_borderTexels); 235 243 236 244 *newDst = FloatRect( … … 243 251 IntPoint TilingData::textureOffset(int xIndex, int yIndex) const 244 252 { 245 int left = (!xIndex || m_numTilesX == 1) ? 0 : m_borderTexels; 246 int top = (!yIndex || m_numTilesY == 1) ? 0 : m_borderTexels; 247 248 return IntPoint(left, top); 253 return IntPoint(m_borderTexels, m_borderTexels); 249 254 } 250 255 -
trunk/Source/WebCore/platform/graphics/gpu/TilingData.h
r87750 r90646 62 62 IntRect tileBounds(int tile) const; 63 63 IntRect tileBoundsWithBorder(int tile) const; 64 IntRect tileBoundsWithOuterBorder(int tile) const; 64 65 FloatRect tileBoundsNormalized(int tile) const; 65 66 int tilePositionX(int xIndex) const; -
trunk/Source/WebKit/ChangeLog
r90093 r90646 1 2011-07-08 David Reveman <reveman@chromium.org> 2 3 Reviewed by Stephen White. 4 5 [Chromium] Edge anti-aliasing for composited layers. 6 https://bugs.webkit.org/show_bug.cgi?id=61388 7 8 Track changes to TilingData class which now uses an outer border. 9 10 * chromium/tests/TilingDataTest.cpp: 11 1 12 2011-06-30 Leandro Pereira <leandro@profusion.mobi> 2 13 -
trunk/Source/WebKit/chromium/tests/TilingDataTest.cpp
r87094 r90646 42 42 { 43 43 EXPECT_EQ(1, TilingData(16, 16, 16, false).numTiles()); 44 EXPECT_EQ(1, TilingData(1 6, 15, 15, true).numTiles());45 EXPECT_EQ(1, TilingData(1 6, 16, 16, true).numTiles());44 EXPECT_EQ(1, TilingData(17, 15, 15, true).numTiles()); 45 EXPECT_EQ(1, TilingData(18, 16, 16, true).numTiles()); 46 46 EXPECT_EQ(1, TilingData(16, 1, 16, false).numTiles()); 47 EXPECT_EQ(1, TilingData(1 5, 15, 15, true).numTiles());47 EXPECT_EQ(1, TilingData(17, 15, 15, true).numTiles()); 48 48 } 49 49 … … 110 110 EXPECT_EQ(0, TilingData(0, 1, 1, true).numTiles()); 111 111 112 EXPECT_EQ( 1, TilingData(1, 1, 1, true).numTiles());112 EXPECT_EQ(0, TilingData(1, 1, 1, true).numTiles()); 113 113 EXPECT_EQ(0, TilingData(1, 1, 2, true).numTiles()); 114 114 EXPECT_EQ(0, TilingData(1, 2, 1, true).numTiles()); 115 EXPECT_EQ( 1, TilingData(2, 1, 1, true).numTiles());116 EXPECT_EQ( 1, TilingData(2, 1, 2, true).numTiles());117 EXPECT_EQ( 1, TilingData(2, 2, 1, true).numTiles());118 EXPECT_EQ( 1, TilingData(2, 2, 2, true).numTiles());119 120 EXPECT_EQ(1, TilingData(3, 1, 3, true).numTiles());121 EXPECT_EQ( 1, TilingData(3, 2, 3, true).numTiles());122 EXPECT_EQ( 1, TilingData(3, 3, 3, true).numTiles());123 EXPECT_EQ( 2, TilingData(3, 4, 3, true).numTiles());124 EXPECT_EQ( 3, TilingData(3, 5, 3, true).numTiles());125 EXPECT_EQ( 4, TilingData(3, 6, 3, true).numTiles());126 EXPECT_EQ( 5, TilingData(3, 7, 3, true).numTiles());127 128 EXPECT_EQ(1, TilingData(4, 1, 4, true).numTiles());129 EXPECT_EQ(1, TilingData(4, 2, 4, true).numTiles());130 EXPECT_EQ( 1, TilingData(4, 3, 4, true).numTiles());131 EXPECT_EQ( 1, TilingData(4, 4, 4, true).numTiles());132 EXPECT_EQ( 2, TilingData(4, 5, 4, true).numTiles());133 EXPECT_EQ( 2, TilingData(4, 6, 4, true).numTiles());134 EXPECT_EQ( 3, TilingData(4, 7, 4, true).numTiles());135 EXPECT_EQ( 3, TilingData(4, 8, 4, true).numTiles());136 EXPECT_EQ( 4, TilingData(4, 9, 4, true).numTiles());137 EXPECT_EQ( 4, TilingData(4, 10, 4, true).numTiles());138 EXPECT_EQ( 5, TilingData(4, 11, 4, true).numTiles());139 140 EXPECT_EQ(1, TilingData(5, 1, 5, true).numTiles());141 EXPECT_EQ(1, TilingData(5, 2, 5, true).numTiles());142 EXPECT_EQ(1, TilingData(5, 3, 5, true).numTiles());143 EXPECT_EQ( 1, TilingData(5, 4, 5, true).numTiles());144 EXPECT_EQ( 1, TilingData(5, 5, 5, true).numTiles());145 EXPECT_EQ(2, TilingData(5, 6, 5, true).numTiles());146 EXPECT_EQ( 2, TilingData(5, 7, 5, true).numTiles());147 EXPECT_EQ( 2, TilingData(5, 8, 5, true).numTiles());148 EXPECT_EQ(3, TilingData(5, 9, 5, true).numTiles());149 EXPECT_EQ( 3, TilingData(5, 10, 5, true).numTiles());150 EXPECT_EQ( 3, TilingData(5, 11, 5, true).numTiles());115 EXPECT_EQ(0, TilingData(2, 1, 1, true).numTiles()); 116 EXPECT_EQ(0, TilingData(2, 1, 2, true).numTiles()); 117 EXPECT_EQ(0, TilingData(2, 2, 1, true).numTiles()); 118 EXPECT_EQ(0, TilingData(2, 2, 2, true).numTiles()); 119 120 EXPECT_EQ(1, TilingData(3, 1, 1, true).numTiles()); 121 EXPECT_EQ(2, TilingData(3, 1, 2, true).numTiles()); 122 EXPECT_EQ(2, TilingData(3, 2, 1, true).numTiles()); 123 EXPECT_EQ(4, TilingData(3, 2, 2, true).numTiles()); 124 EXPECT_EQ(6, TilingData(3, 2, 3, true).numTiles()); 125 EXPECT_EQ(6, TilingData(3, 3, 2, true).numTiles()); 126 EXPECT_EQ(9, TilingData(3, 3, 3, true).numTiles()); 127 128 EXPECT_EQ(1, TilingData(4, 1, 2, true).numTiles()); 129 EXPECT_EQ(1, TilingData(4, 2, 2, true).numTiles()); 130 EXPECT_EQ(2, TilingData(4, 3, 2, true).numTiles()); 131 EXPECT_EQ(2, TilingData(4, 4, 2, true).numTiles()); 132 EXPECT_EQ(3, TilingData(4, 5, 2, true).numTiles()); 133 EXPECT_EQ(3, TilingData(4, 6, 2, true).numTiles()); 134 EXPECT_EQ(4, TilingData(4, 7, 2, true).numTiles()); 135 EXPECT_EQ(4, TilingData(4, 8, 2, true).numTiles()); 136 EXPECT_EQ(5, TilingData(4, 9, 2, true).numTiles()); 137 EXPECT_EQ(5, TilingData(4, 10, 2, true).numTiles()); 138 EXPECT_EQ(6, TilingData(4, 11, 2, true).numTiles()); 139 140 EXPECT_EQ(1, TilingData(5, 1, 3, true).numTiles()); 141 EXPECT_EQ(1, TilingData(5, 2, 3, true).numTiles()); 142 EXPECT_EQ(1, TilingData(5, 3, 3, true).numTiles()); 143 EXPECT_EQ(2, TilingData(5, 4, 3, true).numTiles()); 144 EXPECT_EQ(2, TilingData(5, 5, 3, true).numTiles()); 145 EXPECT_EQ(2, TilingData(5, 6, 3, true).numTiles()); 146 EXPECT_EQ(3, TilingData(5, 7, 3, true).numTiles()); 147 EXPECT_EQ(3, TilingData(5, 8, 3, true).numTiles()); 148 EXPECT_EQ(3, TilingData(5, 9, 3, true).numTiles()); 149 EXPECT_EQ(4, TilingData(5, 10, 3, true).numTiles()); 150 EXPECT_EQ(4, TilingData(5, 11, 3, true).numTiles()); 151 151 } 152 152 … … 167 167 168 168 EXPECT_EQ(0, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(0)); 169 EXPECT_EQ( 0, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(1));170 EXPECT_EQ( 1, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(2));171 EXPECT_EQ( 2, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(3));172 EXPECT_EQ( 3, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(4));173 EXPECT_EQ( 4, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(5));174 EXPECT_EQ( 5, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(6));175 EXPECT_EQ( 6, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(7));176 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(8));177 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(9));178 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(10));179 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(11));169 EXPECT_EQ(1, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(1)); 170 EXPECT_EQ(2, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(2)); 171 EXPECT_EQ(3, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(3)); 172 EXPECT_EQ(4, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(4)); 173 EXPECT_EQ(5, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(5)); 174 EXPECT_EQ(6, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(6)); 175 EXPECT_EQ(7, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(7)); 176 EXPECT_EQ(8, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(8)); 177 EXPECT_EQ(9, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(9)); 178 EXPECT_EQ(9, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(10)); 179 EXPECT_EQ(9, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(11)); 180 180 181 181 EXPECT_EQ(0, TilingData(1, 1, 1, false).tileXIndexFromSrcCoord(0)); … … 195 195 EXPECT_EQ(0, TilingData(2, 2, 2, true).tileXIndexFromSrcCoord(1)); 196 196 EXPECT_EQ(0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(0)); 197 EXPECT_EQ( 0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(1));198 EXPECT_EQ( 0, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(2));199 200 EXPECT_EQ(0, TilingData( 3, 4, 3, true).tileXIndexFromSrcCoord(0));201 EXPECT_EQ(0, TilingData( 3, 4, 3, true).tileXIndexFromSrcCoord(1));202 EXPECT_EQ(1, TilingData( 3, 4, 3, true).tileXIndexFromSrcCoord(2));203 EXPECT_EQ(1, TilingData( 3, 4, 3, true).tileXIndexFromSrcCoord(3));197 EXPECT_EQ(1, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(1)); 198 EXPECT_EQ(2, TilingData(3, 3, 3, true).tileXIndexFromSrcCoord(2)); 199 200 EXPECT_EQ(0, TilingData(4, 4, 3, true).tileXIndexFromSrcCoord(0)); 201 EXPECT_EQ(0, TilingData(4, 4, 3, true).tileXIndexFromSrcCoord(1)); 202 EXPECT_EQ(1, TilingData(4, 4, 3, true).tileXIndexFromSrcCoord(2)); 203 EXPECT_EQ(1, TilingData(4, 4, 3, true).tileXIndexFromSrcCoord(3)); 204 204 } 205 205 TEST(TilingDataTest, tileYIndexFromSrcCoord) … … 219 219 220 220 EXPECT_EQ(0, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(0)); 221 EXPECT_EQ( 0, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(1));222 EXPECT_EQ( 1, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(2));223 EXPECT_EQ( 2, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(3));224 EXPECT_EQ( 3, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(4));225 EXPECT_EQ( 4, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(5));226 EXPECT_EQ( 5, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(6));227 EXPECT_EQ( 6, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(7));228 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(8));229 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(9));230 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(10));231 EXPECT_EQ( 7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(11));221 EXPECT_EQ(1, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(1)); 222 EXPECT_EQ(2, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(2)); 223 EXPECT_EQ(3, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(3)); 224 EXPECT_EQ(4, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(4)); 225 EXPECT_EQ(5, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(5)); 226 EXPECT_EQ(6, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(6)); 227 EXPECT_EQ(7, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(7)); 228 EXPECT_EQ(8, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(8)); 229 EXPECT_EQ(9, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(9)); 230 EXPECT_EQ(9, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(10)); 231 EXPECT_EQ(9, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(11)); 232 232 233 233 EXPECT_EQ(0, TilingData(1, 1, 1, false).tileYIndexFromSrcCoord(0)); … … 247 247 EXPECT_EQ(0, TilingData(2, 2, 2, true).tileYIndexFromSrcCoord(1)); 248 248 EXPECT_EQ(0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(0)); 249 EXPECT_EQ( 0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(1));250 EXPECT_EQ( 0, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(2));251 252 EXPECT_EQ(0, TilingData( 3, 3, 4, true).tileYIndexFromSrcCoord(0));253 EXPECT_EQ(0, TilingData( 3, 3, 4, true).tileYIndexFromSrcCoord(1));254 EXPECT_EQ(1, TilingData( 3, 3, 4, true).tileYIndexFromSrcCoord(2));255 EXPECT_EQ(1, TilingData( 3, 3, 4, true).tileYIndexFromSrcCoord(3));249 EXPECT_EQ(1, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(1)); 250 EXPECT_EQ(2, TilingData(3, 3, 3, true).tileYIndexFromSrcCoord(2)); 251 252 EXPECT_EQ(0, TilingData(4, 3, 4, true).tileYIndexFromSrcCoord(0)); 253 EXPECT_EQ(0, TilingData(4, 3, 4, true).tileYIndexFromSrcCoord(1)); 254 EXPECT_EQ(1, TilingData(4, 3, 4, true).tileYIndexFromSrcCoord(2)); 255 EXPECT_EQ(1, TilingData(4, 3, 4, true).tileYIndexFromSrcCoord(3)); 256 256 } 257 257 … … 259 259 { 260 260 EXPECT_EQ(5, TilingData(5, 5, 5, false).tileSizeX(0)); 261 EXPECT_EQ( 5, TilingData(5, 5, 5, true).tileSizeX(0));261 EXPECT_EQ(3, TilingData(5, 5, 5, true).tileSizeX(0)); 262 262 263 263 EXPECT_EQ(5, TilingData(5, 6, 6, false).tileSizeX(0)); 264 264 EXPECT_EQ(1, TilingData(5, 6, 6, false).tileSizeX(1)); 265 EXPECT_EQ( 4, TilingData(5, 6, 6, true).tileSizeX(0));266 EXPECT_EQ( 2, TilingData(5, 6, 6, true).tileSizeX(1));265 EXPECT_EQ(3, TilingData(5, 6, 6, true).tileSizeX(0)); 266 EXPECT_EQ(3, TilingData(5, 6, 6, true).tileSizeX(1)); 267 267 268 268 EXPECT_EQ(5, TilingData(5, 8, 8, false).tileSizeX(0)); 269 269 EXPECT_EQ(3, TilingData(5, 8, 8, false).tileSizeX(1)); 270 EXPECT_EQ( 4, TilingData(5, 8, 8, true).tileSizeX(0));271 EXPECT_EQ( 4, TilingData(5, 8, 8, true).tileSizeX(1));270 EXPECT_EQ(3, TilingData(5, 8, 8, true).tileSizeX(0)); 271 EXPECT_EQ(3, TilingData(5, 8, 8, true).tileSizeX(1)); 272 272 273 273 EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeX(0)); 274 274 EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeX(1)); 275 EXPECT_EQ( 4, TilingData(5, 10, 10, true).tileSizeX(0));275 EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeX(0)); 276 276 EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeX(1)); 277 277 EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeX(2)); 278 278 279 EXPECT_EQ( 4, TilingData(5, 11, 11, true).tileSizeX(2));279 EXPECT_EQ(3, TilingData(5, 11, 11, true).tileSizeX(2)); 280 280 EXPECT_EQ(3, TilingData(5, 12, 12, true).tileSizeX(2)); 281 281 } … … 283 283 { 284 284 EXPECT_EQ(5, TilingData(5, 5, 5, false).tileSizeY(0)); 285 EXPECT_EQ( 5, TilingData(5, 5, 5, true).tileSizeY(0));285 EXPECT_EQ(3, TilingData(5, 5, 5, true).tileSizeY(0)); 286 286 287 287 EXPECT_EQ(5, TilingData(5, 6, 6, false).tileSizeY(0)); 288 288 EXPECT_EQ(1, TilingData(5, 6, 6, false).tileSizeY(1)); 289 EXPECT_EQ( 4, TilingData(5, 6, 6, true).tileSizeY(0));290 EXPECT_EQ( 2, TilingData(5, 6, 6, true).tileSizeY(1));289 EXPECT_EQ(3, TilingData(5, 6, 6, true).tileSizeY(0)); 290 EXPECT_EQ(3, TilingData(5, 6, 6, true).tileSizeY(1)); 291 291 292 292 EXPECT_EQ(5, TilingData(5, 8, 8, false).tileSizeY(0)); 293 293 EXPECT_EQ(3, TilingData(5, 8, 8, false).tileSizeY(1)); 294 EXPECT_EQ( 4, TilingData(5, 8, 8, true).tileSizeY(0));295 EXPECT_EQ( 4, TilingData(5, 8, 8, true).tileSizeY(1));294 EXPECT_EQ(3, TilingData(5, 8, 8, true).tileSizeY(0)); 295 EXPECT_EQ(3, TilingData(5, 8, 8, true).tileSizeY(1)); 296 296 297 297 EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeY(0)); 298 298 EXPECT_EQ(5, TilingData(5, 10, 10, false).tileSizeY(1)); 299 EXPECT_EQ( 4, TilingData(5, 10, 10, true).tileSizeY(0));299 EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeY(0)); 300 300 EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeY(1)); 301 301 EXPECT_EQ(3, TilingData(5, 10, 10, true).tileSizeY(2)); 302 302 303 EXPECT_EQ( 4, TilingData(5, 11, 11, true).tileSizeY(2));303 EXPECT_EQ(3, TilingData(5, 11, 11, true).tileSizeY(2)); 304 304 EXPECT_EQ(3, TilingData(5, 12, 12, true).tileSizeY(2)); 305 305 } … … 320 320 EXPECT_EQ(1, TilingData(3, 1, 100, true).tileSizeX(0)); 321 321 EXPECT_EQ(0, TilingData(3, 1, 100, true).tilePositionX(0)); 322 EXPECT_EQ(3, TilingData( 3, 3, 1, true).tileSizeX(0));323 EXPECT_EQ(0, TilingData( 3, 3, 1, true).tilePositionX(0));324 EXPECT_EQ(3, TilingData( 3, 3, 100, true).tileSizeX(0));325 EXPECT_EQ(0, TilingData( 3, 3, 100, true).tilePositionX(0));322 EXPECT_EQ(3, TilingData(5, 3, 1, true).tileSizeX(0)); 323 EXPECT_EQ(0, TilingData(5, 3, 1, true).tilePositionX(0)); 324 EXPECT_EQ(3, TilingData(5, 3, 100, true).tileSizeX(0)); 325 EXPECT_EQ(0, TilingData(5, 3, 100, true).tilePositionX(0)); 326 326 327 327 // Multiple tiles: … … 341 341 // with border 342 342 // positions 0, 2, 3, 4 343 EXPECT_EQ(4, TilingData(3, 6, 1, true).numTiles());344 EXPECT_EQ( 2, TilingData(3, 6, 1, true).tileSizeX(0));345 EXPECT_EQ(1, TilingData(3, 6, 1, true).tileSizeX(1));346 EXPECT_EQ(1, TilingData(3, 6, 1, true).tileSizeX(2));347 EXPECT_EQ( 2, TilingData(3, 6, 1, true).tileSizeX(3));348 EXPECT_EQ(0, TilingData(3, 6, 1, true).tilePositionX(0));349 EXPECT_EQ( 2, TilingData(3, 6, 1, true).tilePositionX(1));350 EXPECT_EQ( 3, TilingData(3, 6, 1, true).tilePositionX(2));351 EXPECT_EQ( 4, TilingData(3, 6, 1, true).tilePositionX(3));352 EXPECT_EQ( 2, TilingData(3, 6, 100, true).tileSizeX(0));353 EXPECT_EQ(1, TilingData(3, 6, 100, true).tileSizeX(1));354 EXPECT_EQ(1, TilingData(3, 6, 100, true).tileSizeX(2));355 EXPECT_EQ( 2, TilingData(3, 6, 100, true).tileSizeX(3));356 EXPECT_EQ(0, TilingData(3, 6, 100, true).tilePositionX(0));357 EXPECT_EQ( 2, TilingData(3, 6, 100, true).tilePositionX(1));358 EXPECT_EQ( 3, TilingData(3, 6, 100, true).tilePositionX(2));359 EXPECT_EQ( 4, TilingData(3, 6, 100, true).tilePositionX(3));343 EXPECT_EQ(4, TilingData(3, 4, 1, true).numTiles()); 344 EXPECT_EQ(1, TilingData(3, 4, 1, true).tileSizeX(0)); 345 EXPECT_EQ(1, TilingData(3, 4, 1, true).tileSizeX(1)); 346 EXPECT_EQ(1, TilingData(3, 4, 1, true).tileSizeX(2)); 347 EXPECT_EQ(1, TilingData(3, 4, 1, true).tileSizeX(3)); 348 EXPECT_EQ(0, TilingData(3, 4, 1, true).tilePositionX(0)); 349 EXPECT_EQ(1, TilingData(3, 4, 1, true).tilePositionX(1)); 350 EXPECT_EQ(2, TilingData(3, 4, 1, true).tilePositionX(2)); 351 EXPECT_EQ(3, TilingData(3, 4, 1, true).tilePositionX(3)); 352 EXPECT_EQ(1, TilingData(3, 4, 100, true).tileSizeX(0)); 353 EXPECT_EQ(1, TilingData(3, 4, 100, true).tileSizeX(1)); 354 EXPECT_EQ(1, TilingData(3, 4, 100, true).tileSizeX(2)); 355 EXPECT_EQ(1, TilingData(3, 4, 100, true).tileSizeX(3)); 356 EXPECT_EQ(0, TilingData(3, 4, 100, true).tilePositionX(0)); 357 EXPECT_EQ(1, TilingData(3, 4, 100, true).tilePositionX(1)); 358 EXPECT_EQ(2, TilingData(3, 4, 100, true).tilePositionX(2)); 359 EXPECT_EQ(3, TilingData(3, 4, 100, true).tilePositionX(3)); 360 360 } 361 361 … … 375 375 EXPECT_EQ(1, TilingData(3, 100, 1, true).tileSizeY(0)); 376 376 EXPECT_EQ(0, TilingData(3, 100, 1, true).tilePositionY(0)); 377 EXPECT_EQ(3, TilingData( 3, 1, 3, true).tileSizeY(0));378 EXPECT_EQ(0, TilingData( 3, 1, 3, true).tilePositionY(0));379 EXPECT_EQ(3, TilingData( 3, 100, 3, true).tileSizeY(0));380 EXPECT_EQ(0, TilingData( 3, 100, 3, true).tilePositionY(0));377 EXPECT_EQ(3, TilingData(5, 1, 3, true).tileSizeY(0)); 378 EXPECT_EQ(0, TilingData(5, 1, 3, true).tilePositionY(0)); 379 EXPECT_EQ(3, TilingData(5, 100, 3, true).tileSizeY(0)); 380 EXPECT_EQ(0, TilingData(5, 100, 3, true).tilePositionY(0)); 381 381 382 382 // Multiple tiles: … … 396 396 // with border 397 397 // positions 0, 2, 3, 4 398 EXPECT_EQ(4, TilingData(3, 1, 6, true).numTiles());399 EXPECT_EQ( 2, TilingData(3, 1, 6, true).tileSizeY(0));400 EXPECT_EQ(1, TilingData(3, 1, 6, true).tileSizeY(1));401 EXPECT_EQ(1, TilingData(3, 1, 6, true).tileSizeY(2));402 EXPECT_EQ( 2, TilingData(3, 1, 6, true).tileSizeY(3));403 EXPECT_EQ(0, TilingData(3, 1, 6, true).tilePositionY(0));404 EXPECT_EQ( 2, TilingData(3, 1, 6, true).tilePositionY(1));405 EXPECT_EQ( 3, TilingData(3, 1, 6, true).tilePositionY(2));406 EXPECT_EQ( 4, TilingData(3, 1, 6, true).tilePositionY(3));407 EXPECT_EQ( 2, TilingData(3, 100, 6, true).tileSizeY(0));408 EXPECT_EQ(1, TilingData(3, 100, 6, true).tileSizeY(1));409 EXPECT_EQ(1, TilingData(3, 100, 6, true).tileSizeY(2));410 EXPECT_EQ( 2, TilingData(3, 100, 6, true).tileSizeY(3));411 EXPECT_EQ(0, TilingData(3, 100, 6, true).tilePositionY(0));412 EXPECT_EQ( 2, TilingData(3, 100, 6, true).tilePositionY(1));413 EXPECT_EQ( 3, TilingData(3, 100, 6, true).tilePositionY(2));414 EXPECT_EQ( 4, TilingData(3, 100, 6, true).tilePositionY(3));398 EXPECT_EQ(4, TilingData(3, 1, 4, true).numTiles()); 399 EXPECT_EQ(1, TilingData(3, 1, 4, true).tileSizeY(0)); 400 EXPECT_EQ(1, TilingData(3, 1, 4, true).tileSizeY(1)); 401 EXPECT_EQ(1, TilingData(3, 1, 4, true).tileSizeY(2)); 402 EXPECT_EQ(1, TilingData(3, 1, 4, true).tileSizeY(3)); 403 EXPECT_EQ(0, TilingData(3, 1, 4, true).tilePositionY(0)); 404 EXPECT_EQ(1, TilingData(3, 1, 4, true).tilePositionY(1)); 405 EXPECT_EQ(2, TilingData(3, 1, 4, true).tilePositionY(2)); 406 EXPECT_EQ(3, TilingData(3, 1, 4, true).tilePositionY(3)); 407 EXPECT_EQ(1, TilingData(3, 100, 4, true).tileSizeY(0)); 408 EXPECT_EQ(1, TilingData(3, 100, 4, true).tileSizeY(1)); 409 EXPECT_EQ(1, TilingData(3, 100, 4, true).tileSizeY(2)); 410 EXPECT_EQ(1, TilingData(3, 100, 4, true).tileSizeY(3)); 411 EXPECT_EQ(0, TilingData(3, 100, 4, true).tilePositionY(0)); 412 EXPECT_EQ(1, TilingData(3, 100, 4, true).tilePositionY(1)); 413 EXPECT_EQ(2, TilingData(3, 100, 4, true).tilePositionY(2)); 414 EXPECT_EQ(3, TilingData(3, 100, 4, true).tilePositionY(3)); 415 415 } 416 416 … … 469 469 TEST(TilingDataTest, setMaxTextureSizeBorders) 470 470 { 471 TilingData data(8, 16, 3 2, true);471 TilingData data(8, 16, 30, true); 472 472 EXPECT_EQ(3, data.numTilesX()); 473 473 EXPECT_EQ(5, data.numTilesY()); … … 485 485 data.setMaxTextureSize(5); 486 486 EXPECT_EQ(5, data.maxTextureSize()); 487 EXPECT_EQ( 5, data.numTilesX());487 EXPECT_EQ(6, data.numTilesX()); 488 488 EXPECT_EQ(10, data.numTilesY()); 489 489 }
Note: See TracChangeset
for help on using the changeset viewer.