Changeset 92255 in webkit
- Timestamp:
- Aug 2, 2011 7:52:17 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r92235 r92255 1 2011-08-02 David Reveman <reveman@chromium.org> 2 3 [Chromium] Use edge-distance method for layer anti-aliasing. 4 https://bugs.webkit.org/show_bug.cgi?id=64942 5 6 Reviewed by James Robinson. 7 8 Update expected results. 9 10 * platform/chromium/test_expectations.txt: 11 1 12 2011-08-02 Zhenyao Mo <zmo@google.com> 2 13 -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r92235 r92255 2704 2704 // 2 pixel stretching when rendering some videos with the GPU (Now it's flaky) 2705 2705 BUGCR74102 GPU LINUX : media/video-controls-rendering.html = IMAGE PASS 2706 2707 BUGWK64942 : compositing/color-matching/image-color-matching.html = IMAGE 2708 BUGWK64942 : compositing/geometry/ancestor-overflow-change.html = IMAGE 2709 BUGWK64942 : compositing/geometry/fixed-position.html = IMAGE 2710 BUGWK64942 : compositing/geometry/layer-due-to-layer-children-deep.html = IMAGE 2711 BUGWK64942 : compositing/geometry/layer-due-to-layer-children.html = IMAGE 2712 BUGWK64942 : compositing/geometry/vertical-scroll-composited.html = IMAGE 2713 BUGWK64942 : compositing/overflow/fixed-position-ancestor-clip.html = IMAGE 2714 BUGWK64942 : compositing/reflections/nested-reflection-transition.html = IMAGE 2715 BUGWK64942 : compositing/reflections/transform-inside-reflection.html = IMAGE 2716 BUGWK64942 : compositing/shadows/shadow-drawing.html = IMAGE 2717 BUGWK64942 : compositing/transitions/scale-transition-no-start.html = IMAGE 2718 BUGWK64942 : media/video-transformed.html = IMAGE 2719 BUGWK64942 : media/video-zoom-controls.html = IMAGE 2720 BUGWK64942 : platform/chromium/compositing/backface-visibility-transformed.html = IMAGE 2721 BUGWK64942 : platform/chromium/compositing/huge-layer-rotated.html = IMAGE 2722 BUGWK64942 : platform/chromium/compositing/perpendicular-layer-sorting.html = IMAGE 2723 BUGWK64942 : platform/chromium/compositing/tiny-layer-rotated.html = IMAGE 2706 2724 2707 2725 -
trunk/Source/WebCore/ChangeLog
r92254 r92255 1 2011-08-02 David Reveman <reveman@chromium.org> 2 3 [Chromium] Use edge-distance method for layer anti-aliasing. 4 https://bugs.webkit.org/show_bug.cgi?id=64942 5 6 Reviewed by James Robinson. 7 8 Use an edge distance based method instead of the current linear 9 filtering method for producing anti-aliased edges on 3D transformed 10 layers. This removes the outer border handling from TilingData as 11 it's no longer needed for anti-aliasing. 12 13 Tests: platform/chromium/compositing/tiny-layer-rotated.html (existing) 14 platform/chromium/compositing/huge-layer-rotated.html (existing) 15 compositing/images/content-image-change.html (existing) 16 TilingDataTest in webkit_unit_tests 17 18 * platform/graphics/chromium/LayerRendererChromium.cpp: 19 (WebCore::screenMatrix): 20 (WebCore::LayerRendererChromium::drawLayers): 21 (WebCore::LayerRendererChromium::setDrawViewportRect): 22 (WebCore::LayerRendererChromium::tilerProgramAA): 23 (WebCore::LayerRendererChromium::tilerProgramSwizzleAA): 24 * platform/graphics/chromium/LayerRendererChromium.h: 25 (WebCore::LayerRendererChromium::windowMatrix): 26 * platform/graphics/chromium/LayerTilerChromium.cpp: 27 (WebCore::LayerTilerChromium::setTileSize): 28 (WebCore::LayerTilerChromium::tileLayerRect): 29 (WebCore::LayerTilerChromium::invalidateRect): 30 (WebCore::LayerTilerChromium::prepareToUpdate): 31 (WebCore::LayerTilerChromium::updateRect): 32 (WebCore::LayerTilerChromium::draw): 33 (WebCore::LayerTilerChromium::growLayerToContain): 34 (WebCore::LayerTilerChromium::drawTiles): 35 * platform/graphics/chromium/LayerTilerChromium.h: 36 * platform/graphics/chromium/ShaderChromium.cpp: 37 (WebCore::VertexShaderTile::VertexShaderTile): 38 (WebCore::VertexShaderTile::init): 39 (WebCore::VertexShaderTile::getShaderString): 40 (WebCore::FragmentTexAlphaAABinding::FragmentTexAlphaAABinding): 41 (WebCore::FragmentTexAlphaAABinding::init): 42 (WebCore::FragmentShaderRGBATexAlphaAA::getShaderString): 43 (WebCore::FragmentShaderRGBATexSwizzleAlphaAA::getShaderString): 44 * platform/graphics/chromium/ShaderChromium.h: 45 (WebCore::VertexShaderTile::vertexTexTransformLocation): 46 (WebCore::FragmentTexAlphaAABinding::alphaLocation): 47 (WebCore::FragmentTexAlphaAABinding::samplerLocation): 48 (WebCore::FragmentTexAlphaAABinding::fragmentTexTransformLocation): 49 (WebCore::FragmentTexAlphaAABinding::edgeLocation): 50 * platform/graphics/chromium/TiledLayerChromium.cpp: 51 (WebCore::TiledLayerChromium::TiledLayerChromium): 52 (WebCore::TiledLayerChromium::updateTileSizeAndTilingOption): 53 (WebCore::TiledLayerChromium::createTilerIfNeeded): 54 (WebCore::TiledLayerChromium::setIsMask): 55 * platform/graphics/chromium/TiledLayerChromium.h: 56 * platform/graphics/gpu/TilingData.cpp: 57 (WebCore::computeNumTiles): 58 (WebCore::TilingData::tileXIndexFromSrcCoord): 59 (WebCore::TilingData::tileYIndexFromSrcCoord): 60 (WebCore::TilingData::tileSizeX): 61 (WebCore::TilingData::tileSizeY): 62 (WebCore::TilingData::intersectDrawQuad): 63 (WebCore::TilingData::textureOffset): 64 * platform/graphics/gpu/TilingData.h: 65 1 66 2011-08-01 David Levin <levin@chromium.org> 2 67 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r92245 r92255 406 406 } 407 407 408 static TransformationMatrix screenMatrix(int x, int y, int width, int height) 409 { 410 TransformationMatrix screen; 411 412 // Map to viewport. 413 screen.translate3d(x, y, 0); 414 screen.scale3d(width, height, 0); 415 416 // Map x, y and z to unit square. 417 screen.translate3d(0.5, 0.5, 0.5); 418 screen.scale3d(0.5, 0.5, 0.5); 419 420 return screen; 421 } 422 408 423 PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHostClient* client, PassOwnPtr<LayerPainterChromium> contentPaint, bool accelerateDrawing) 409 424 { … … 777 792 // The GL viewport covers the entire visible area, including the scrollbars. 778 793 GLC(m_context.get(), m_context->viewport(0, 0, m_viewportVisibleRect.width(), m_viewportVisibleRect.height())); 794 m_windowMatrix = screenMatrix(0, 0, m_viewportVisibleRect.width(), m_viewportVisibleRect.height()); 779 795 780 796 // Bind the common vertex attributes used for drawing all the layers. … … 1156 1172 m_projectionMatrix = orthoMatrix(drawRect.x(), drawRect.maxX(), drawRect.y(), drawRect.maxY()); 1157 1173 GLC(m_context.get(), m_context->viewport(0, 0, drawRect.width(), drawRect.height())); 1174 m_windowMatrix = screenMatrix(0, 0, drawRect.width(), drawRect.height()); 1158 1175 } 1159 1176 … … 1246 1263 } 1247 1264 return m_tilerProgramSwizzle.get(); 1265 } 1266 1267 const LayerTilerChromium::ProgramAA* LayerRendererChromium::tilerProgramAA() 1268 { 1269 if (!m_tilerProgramAA) 1270 m_tilerProgramAA = adoptPtr(new LayerTilerChromium::ProgramAA(m_context.get())); 1271 if (!m_tilerProgramAA->initialized()) { 1272 TRACE_EVENT("LayerRendererChromium::tilerProgramAA::initialize", this, 0); 1273 m_tilerProgramAA->initialize(); 1274 } 1275 return m_tilerProgramAA.get(); 1276 } 1277 1278 const LayerTilerChromium::ProgramSwizzleAA* LayerRendererChromium::tilerProgramSwizzleAA() 1279 { 1280 if (!m_tilerProgramSwizzleAA) 1281 m_tilerProgramSwizzleAA = adoptPtr(new LayerTilerChromium::ProgramSwizzleAA(m_context.get())); 1282 if (!m_tilerProgramSwizzleAA->initialized()) { 1283 TRACE_EVENT("LayerRendererChromium::tilerProgramSwizzleAA::initialize", this, 0); 1284 m_tilerProgramSwizzleAA->initialize(); 1285 } 1286 return m_tilerProgramSwizzleAA.get(); 1248 1287 } 1249 1288 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r92245 r92255 122 122 123 123 const TransformationMatrix& projectionMatrix() const { return m_projectionMatrix; } 124 const TransformationMatrix& windowMatrix() const { return m_windowMatrix; } 124 125 125 126 bool checkTextureSize(const IntSize&); … … 133 134 const LayerTilerChromium::Program* tilerProgram(); 134 135 const LayerTilerChromium::ProgramSwizzle* tilerProgramSwizzle(); 136 const LayerTilerChromium::ProgramAA* tilerProgramAA(); 137 const LayerTilerChromium::ProgramSwizzleAA* tilerProgramSwizzleAA(); 135 138 const CCCanvasLayerImpl::Program* canvasLayerProgram(); 136 139 const CCPluginLayerImpl::Program* pluginLayerProgram(); … … 210 213 211 214 TransformationMatrix m_projectionMatrix; 215 TransformationMatrix m_windowMatrix; 212 216 213 217 RefPtr<LayerChromium> m_rootLayer; … … 236 240 OwnPtr<LayerTilerChromium::Program> m_tilerProgram; 237 241 OwnPtr<LayerTilerChromium::ProgramSwizzle> m_tilerProgramSwizzle; 242 OwnPtr<LayerTilerChromium::ProgramAA> m_tilerProgramAA; 243 OwnPtr<LayerTilerChromium::ProgramSwizzleAA> m_tilerProgramSwizzleAA; 238 244 OwnPtr<CCCanvasLayerImpl::Program> m_canvasLayerProgram; 239 245 OwnPtr<CCPluginLayerImpl::Program> m_pluginLayerProgram; -
trunk/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp
r91629 r92255 85 85 86 86 m_tileSize = size; 87 m_tilingData.setMaxTextureSize(max(size.width(), size.height())); 87 88 } 88 89 … … 190 191 { 191 192 const int index = m_tilingData.tileIndex(tile->i(), tile->j()); 192 return m_tilingData.tileBoundsWithBorder(index); 193 } 194 195 IntRect LayerTilerChromium::tileTexRect(const Tile* tile) const 196 { 197 const int index = m_tilingData.tileIndex(tile->i(), tile->j()); 198 return m_tilingData.tileBoundsWithOuterBorder(index); 193 IntRect layerRect = m_tilingData.tileBoundsWithBorder(index); 194 layerRect.setSize(m_tileSize); 195 return layerRect; 199 196 } 200 197 … … 203 200 if (contentRect.isEmpty() || m_skipsDraw) 204 201 return; 205 206 IntSize oldLayerSize(m_tilingData.totalSizeX(), m_tilingData.totalSizeY());207 const IntRect oldLayerRect = IntRect(IntPoint(), oldLayerSize);208 202 209 203 growLayerToContain(contentRect); … … 223 217 bound.intersect(layerRect); 224 218 tile->m_dirtyLayerRect.unite(bound); 225 226 // Invalidate old layer area to clear any contents left from227 // previous layer size.228 IntRect oldBound = tileLayerRect(tile);229 oldBound.intersect(oldLayerRect);230 tile->m_dirtyLayerRect.unite(oldBound);231 219 } 232 220 } … … 285 273 // the dirty regions currently being drawn. 286 274 IntRect dirtyLayerRect; 287 IntSize tileSize;288 275 int left, top, right, bottom; 289 276 contentRectToTileIndices(contentRect, left, top, right, bottom); … … 294 281 tile = createTile(i, j); 295 282 296 IntSize texSize = tileTexRect(tile).size(); 297 if (!tile->texture()->isValid(texSize, m_textureFormat)) 283 if (!tile->texture()->isValid(m_tileSize, m_textureFormat)) 298 284 tile->m_dirtyLayerRect = tileLayerRect(tile); 299 285 300 if (!tile->texture()->reserve( texSize, m_textureFormat)) {286 if (!tile->texture()->reserve(m_tileSize, m_textureFormat)) { 301 287 m_skipsDraw = true; 302 288 reset(); … … 305 291 306 292 dirtyLayerRect.unite(tile->m_dirtyLayerRect); 307 308 tileSize = tileSize.expandedTo(texSize);309 293 } 310 294 } … … 319 303 return; 320 304 321 textureUpdater->prepareToUpdate(m_paintRect, tileSize, m_tilingData.borderTexels());305 textureUpdater->prepareToUpdate(m_paintRect, m_tileSize, m_tilingData.borderTexels()); 322 306 } 323 307 … … 344 328 // Calculate page-space rectangle to copy from. 345 329 IntRect sourceRect = tileContentRect(tile); 346 IntRect texRect = tileTexRect(tile); 347 const IntPoint anchor = texRect.location(); 330 const IntPoint anchor = sourceRect.location(); 348 331 sourceRect.intersect(layerRectToContentRect(tile->m_dirtyLayerRect)); 349 332 // Paint rect not guaranteed to line up on tile boundaries, so … … 395 378 return; 396 379 380 // Use anti-aliasing programs when border texels are preset and transform 381 // is not an integer translation. 382 bool useAA = (m_tilingData.borderTexels() && !globalTransform.isIntegerTranslation()); 383 397 384 switch (m_sampledTexelFormat) { 398 385 case LayerTextureUpdater::SampledTexelFormatRGBA: 399 drawTiles(contentRect, globalTransform, opacity, layerRenderer()->tilerProgram()); 386 if (useAA) 387 drawTiles(contentRect, globalTransform, opacity, layerRenderer()->tilerProgramAA(), layerRenderer()->tilerProgramAA()->fragmentShader().fragmentTexTransformLocation(), layerRenderer()->tilerProgramAA()->fragmentShader().edgeLocation()); 388 else 389 drawTiles(contentRect, globalTransform, opacity, layerRenderer()->tilerProgram(), -1, -1); 400 390 break; 401 391 case LayerTextureUpdater::SampledTexelFormatBGRA: 402 drawTiles(contentRect, globalTransform, opacity, layerRenderer()->tilerProgramSwizzle()); 392 if (useAA) 393 drawTiles(contentRect, globalTransform, opacity, layerRenderer()->tilerProgramSwizzleAA(), layerRenderer()->tilerProgramSwizzleAA()->fragmentShader().fragmentTexTransformLocation(), layerRenderer()->tilerProgramSwizzleAA()->fragmentShader().edgeLocation()); 394 else 395 drawTiles(contentRect, globalTransform, opacity, layerRenderer()->tilerProgramSwizzle(), -1, -1); 403 396 break; 404 397 default: … … 412 405 IntRect layerRect = contentRectToLayerRect(contentRect); 413 406 IntSize rectSize = IntSize(layerRect.maxX(), layerRect.maxY()); 414 IntSize texSize = m_tileSize; 415 416 // Use rect with border texels as max texture size when tile size 417 // has not been specified. 418 if (texSize.isEmpty()) { 419 texSize = rectSize; 420 if (m_tilingData.borderTexels()) 421 texSize.expand(2, 2); 422 } 423 424 m_tilingData.setMaxTextureSize(max(texSize.width(), texSize.height())); 407 425 408 IntSize oldLayerSize(m_tilingData.totalSizeX(), m_tilingData.totalSizeY()); 426 409 IntSize newSize = rectSize.expandedTo(oldLayerSize); … … 458 441 459 442 template <class T> 460 void LayerTilerChromium::drawTiles(const IntRect& contentRect, const TransformationMatrix& globalTransform, float opacity, const T* program) 461 { 462 GraphicsContext3D* context = layerRendererContext(); 463 GLC(context, context->useProgram(program->program())); 464 GLC(context, context->uniform1i(program->fragmentShader().samplerLocation(), 0)); 465 GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0)); 466 467 TransformationMatrix matrix(globalTransform); 443 void LayerTilerChromium::drawTiles(const IntRect& contentRect, const TransformationMatrix& globalTransform, float opacity, const T* program, int fragmentTexTransformLocation, int edgeLocation) 444 { 445 TransformationMatrix matrix(layerRenderer()->windowMatrix() * layerRenderer()->projectionMatrix() * globalTransform); 468 446 469 447 // We don't care about Z component. … … 479 457 480 458 TransformationMatrix inverse = matrixXYW.inverse(); 481 IntRect bounds(m_layerPosition, IntSize(m_tilingData.totalSizeX(), 482 m_tilingData.totalSizeY()));483 484 // Include outer border texels in bounds.485 bounds.inflate(m_tilingData.borderTexels());486 487 // Map boundsto device space.488 FloatQuad boundsQuad = matrix.mapQuad(FloatQuad(bounds));459 460 GraphicsContext3D* context = layerRendererContext(); 461 GLC(context, context->useProgram(program->program())); 462 GLC(context, context->uniform1i(program->fragmentShader().samplerLocation(), 0)); 463 GLC(context, context->activeTexture(GraphicsContext3D::TEXTURE0)); 464 465 // Map content rectangle to device space. 466 FloatQuad deviceQuad = matrix.mapQuad(FloatQuad(contentRect)); 489 467 490 468 // Counter-clockwise? 491 float sign = isCCW( boundsQuad) ? -1 : 1;469 float sign = isCCW(deviceQuad) ? -1 : 1; 492 470 493 471 // Compute outer edges. 494 Edge leftEdge = computeEdge(boundsQuad.p4(), boundsQuad.p1(), sign); 495 Edge rightEdge = computeEdge(boundsQuad.p2(), boundsQuad.p3(), sign); 496 Edge topEdge = computeEdge(boundsQuad.p1(), boundsQuad.p2(), sign); 497 Edge bottomEdge = computeEdge(boundsQuad.p3(), boundsQuad.p4(), sign); 498 499 // Move outer edges to ensure that all partially covered pixels are 500 // processed. 501 float zDistance = m_tilingData.borderTexels() * 0.5f; 502 leftEdge.move(0, 0, zDistance); 503 rightEdge.move(0, 0, zDistance); 504 topEdge.move(0, 0, zDistance); 505 bottomEdge.move(0, 0, zDistance); 506 507 GC3Dint filter = (m_tilingData.borderTexels() && !matrix.isIntegerTranslation()) ? GraphicsContext3D::LINEAR : GraphicsContext3D::NEAREST; 472 Edge leftEdge = computeEdge(deviceQuad.p4(), deviceQuad.p1(), sign); 473 Edge rightEdge = computeEdge(deviceQuad.p2(), deviceQuad.p3(), sign); 474 Edge topEdge = computeEdge(deviceQuad.p1(), deviceQuad.p2(), sign); 475 Edge bottomEdge = computeEdge(deviceQuad.p3(), deviceQuad.p4(), sign); 476 477 if (edgeLocation != -1) { 478 // Move outer edges to ensure that all partially covered pixels are 479 // processed. 480 leftEdge.move(0, 0, 0.5f); 481 rightEdge.move(0, 0, 0.5f); 482 topEdge.move(0, 0, 0.5f); 483 bottomEdge.move(0, 0, 0.5f); 484 485 float edge[12]; 486 edge[0] = leftEdge.x(); 487 edge[1] = leftEdge.y(); 488 edge[2] = leftEdge.z(); 489 edge[3] = topEdge.x(); 490 edge[4] = topEdge.y(); 491 edge[5] = topEdge.z(); 492 edge[6] = rightEdge.x(); 493 edge[7] = rightEdge.y(); 494 edge[8] = rightEdge.z(); 495 edge[9] = bottomEdge.x(); 496 edge[10] = bottomEdge.y(); 497 edge[11] = bottomEdge.z(); 498 GLC(context, context->uniform3fv(edgeLocation, edge, 4)); 499 } 508 500 509 501 Edge prevEdgeY = topEdge; … … 511 503 int left, top, right, bottom; 512 504 contentRectToTileIndices(contentRect, left, top, right, bottom); 505 IntRect layerRect = contentRectToLayerRect(contentRect); 513 506 for (int j = top; j <= bottom; ++j) { 514 507 Edge prevEdgeX = leftEdge; … … 516 509 Edge edgeY = bottomEdge; 517 510 if (j < (m_tilingData.numTilesY() - 1)) { 518 IntRect tileRect = m_tilingData.tileBounds(m_tilingData.tileIndex(0, j)); 511 IntRect tileRect = unionRect(m_tilingData.tileBounds(m_tilingData.tileIndex(0, j)), m_tilingData.tileBounds(m_tilingData.tileIndex(m_tilingData.numTilesX() - 1, j))); 512 tileRect.intersect(layerRect); 513 514 // Skip empty rows. 515 if (tileRect.isEmpty()) 516 continue; 517 519 518 tileRect.move(m_layerPosition.x(), m_layerPosition.y()); 520 519 … … 538 537 539 538 tile->texture()->bindTexture(); 540 GLC(context, context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, filter));541 GLC(context, context->texParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, filter));542 539 543 540 // Don't use tileContentRect here, as that contains the full 544 541 // rect with border texels which shouldn't be drawn. 545 542 IntRect tileRect = m_tilingData.tileBounds(m_tilingData.tileIndex(tile->i(), tile->j())); 543 IntRect displayRect = tileRect; 544 tileRect.intersect(layerRect); 545 546 // Keep track of how the top left has moved, so the texture can be 547 // offset the same amount. 548 IntSize displayOffset = tileRect.minXMinYCorner() - displayRect.minXMinYCorner(); 549 550 // Skip empty tiles. 551 if (tileRect.isEmpty()) 552 continue; 553 546 554 tileRect.move(m_layerPosition.x(), m_layerPosition.y()); 547 555 548 IntPoint texOffset = m_tilingData.textureOffset(); 549 IntRect texRect = tileTexRect(tile); 550 float tileWidth = static_cast<float>(texRect.width()); 551 float tileHeight = static_cast<float>(texRect.height()); 552 float texTranslateX = (texOffset.x() - tileRect.x()) / tileWidth; 553 float texTranslateY = (texOffset.y() - tileRect.y()) / tileHeight; 554 float texScaleX = tileRect.width() / tileWidth; 555 float texScaleY = tileRect.height() / tileHeight; 556 FloatRect clampRect(tileRect); 557 // Clamp texture coordinates to avoid sampling outside the layer 558 // by deflating the tile region half a texel or half a texel 559 // minus epsilon for one pixel layers. The resulting clamp region 560 // is mapped to the unit square by the vertex shader and mapped 561 // back to normalized texture coordinates by the fragment shader 562 // after being clamped to 0-1 range. 563 const float epsilon = 1 / 1024.0f; 564 float clampX = min(0.5, clampRect.width() / 2.0 - epsilon); 565 float clampY = min(0.5, clampRect.height() / 2.0 - epsilon); 566 clampRect.inflateX(-clampX); 567 clampRect.inflateY(-clampY); 568 FloatSize clampOffset = clampRect.minXMinYCorner() - FloatRect(tileRect).minXMinYCorner(); 569 570 FloatPoint texOffset = m_tilingData.textureOffset(tile->i(), tile->j()) + clampOffset + FloatSize(displayOffset); 571 float tileWidth = static_cast<float>(m_tileSize.width()); 572 float tileHeight = static_cast<float>(m_tileSize.height()); 573 574 // Map clamping rectangle to unit square. 575 float vertexTexTranslateX = -clampRect.x() / clampRect.width(); 576 float vertexTexTranslateY = -clampRect.y() / clampRect.height(); 577 float vertexTexScaleX = tileRect.width() / clampRect.width(); 578 float vertexTexScaleY = tileRect.height() / clampRect.height(); 579 580 // Map to normalized texture coordinates. 581 float fragmentTexTranslateX = texOffset.x() / tileWidth; 582 float fragmentTexTranslateY = texOffset.y() / tileHeight; 583 float fragmentTexScaleX = clampRect.width() / tileWidth; 584 float fragmentTexScaleY = clampRect.height() / tileHeight; 585 556 586 // OpenGL coordinate system is bottom-up. 557 587 // If tile texture is top-down, we need to flip the texture coordinates. 558 588 if (m_textureOrientation == LayerTextureUpdater::TopDownOrientation) { 559 texTranslateY = 1.0 - texTranslateY;560 texScaleY *= -1.0;589 fragmentTexTranslateY = 1.0 - fragmentTexTranslateY; 590 fragmentTexScaleY *= -1.0; 561 591 } 562 592 … … 586 616 quad.scale(1.0f / tileRect.width(), 1.0f / tileRect.height()); 587 617 588 drawTexturedQuad(context, quad, layerRenderer()->projectionMatrix(), matrix, tileRect.width(), tileRect.height(), opacity, texTranslateX, texTranslateY, texScaleX, texScaleY, program); 618 if (fragmentTexTransformLocation == -1) { 619 // Move fragment shader transform to vertex shader. We can do 620 // this while still producing correct results as 621 // fragmentTexTransformLocation should always be non-negative 622 // when tiles are transformed in a way that could result in 623 // sampling outside the layer. 624 vertexTexScaleX *= fragmentTexScaleX; 625 vertexTexScaleY *= fragmentTexScaleY; 626 vertexTexTranslateX *= fragmentTexScaleX; 627 vertexTexTranslateY *= fragmentTexScaleY; 628 vertexTexTranslateX += fragmentTexTranslateX; 629 vertexTexTranslateY += fragmentTexTranslateY; 630 } else 631 GLC(context, context->uniform4f(fragmentTexTransformLocation, fragmentTexTranslateX, fragmentTexTranslateY, fragmentTexScaleX, fragmentTexScaleY)); 632 633 GLC(context, context->uniform4f(program->vertexShader().vertexTexTransformLocation(), vertexTexTranslateX, vertexTexTranslateY, vertexTexScaleX, vertexTexScaleY)); 634 635 float point[8]; 636 point[0] = quad.p1().x(); 637 point[1] = quad.p1().y(); 638 point[2] = quad.p2().x(); 639 point[3] = quad.p2().y(); 640 point[4] = quad.p3().x(); 641 point[5] = quad.p3().y(); 642 point[6] = quad.p4().x(); 643 point[7] = quad.p4().y(); 644 GLC(context, context->uniform2fv(program->vertexShader().pointLocation(), point, 4)); 645 646 LayerChromium::drawTexturedQuad(context, layerRenderer()->projectionMatrix(), globalTransform, 647 tileRect.width(), tileRect.height(), opacity, 648 program->vertexShader().matrixLocation(), 649 program->fragmentShader().alphaLocation()); 589 650 590 651 prevEdgeX = edgeX; 652 // Reverse direction. 653 prevEdgeX.scale(-1, -1, -1); 591 654 } 592 655 593 656 prevEdgeY = edgeY; 594 } 595 } 596 597 template <class T> 598 void LayerTilerChromium::drawTexturedQuad(GraphicsContext3D* context, const FloatQuad& quad, const TransformationMatrix& projectionMatrix, const TransformationMatrix& drawMatrix, 599 float width, float height, float opacity, 600 float texTranslateX, float texTranslateY, 601 float texScaleX, float texScaleY, 602 const T* program) 603 { 604 static float glMatrix[16]; 605 606 TransformationMatrix renderMatrix = drawMatrix; 607 608 // Apply a scaling factor to size the quad from 1x1 to its intended size. 609 renderMatrix.scale3d(width, height, 1); 610 611 // Apply the projection matrix before sending the transform over to the shader. 612 LayerChromium::toGLMatrix(&glMatrix[0], projectionMatrix * renderMatrix); 613 614 GLC(context, context->uniformMatrix4fv(program->vertexShader().matrixLocation(), false, &glMatrix[0], 1)); 615 616 GLC(context, context->uniform1f(program->fragmentShader().alphaLocation(), opacity)); 617 618 GLC(context, context->uniform4f(program->vertexShader().texTransformLocation(), 619 texTranslateX, texTranslateY, texScaleX, texScaleY)); 620 621 float point[8]; 622 point[0] = quad.p1().x(); 623 point[1] = quad.p1().y(); 624 point[2] = quad.p2().x(); 625 point[3] = quad.p2().y(); 626 point[4] = quad.p3().x(); 627 point[5] = quad.p3().y(); 628 point[6] = quad.p4().x(); 629 point[7] = quad.p4().y(); 630 GLC(context, context->uniform2fv(program->vertexShader().pointLocation(), point, 4)); 631 632 GLC(context, context->drawElements(GraphicsContext3D::TRIANGLES, 6, GraphicsContext3D::UNSIGNED_SHORT, 0)); 657 // Reverse direction. 658 prevEdgeY.scale(-1, -1, -1); 659 } 633 660 } 634 661 -
trunk/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.h
r91720 r92255 76 76 void protectTileTextures(const IntRect& contentRect); 77 77 78 typedef ProgramBinding<VertexShader Quad, FragmentShaderRGBATexAlpha> Program;78 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlpha> Program; 79 79 // Shader program that swaps red and blue components of texture. 80 80 // Used when texture format does not match native color format. 81 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexSwizzleAlpha> ProgramSwizzle; 81 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlpha> ProgramSwizzle; 82 83 // Shader program that produces anti-aliased layer edges. 84 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlphaAA> ProgramAA; 85 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlphaAA> ProgramSwizzleAA; 82 86 83 87 // If this tiler has exactly one tile, return its texture. Otherwise, null. … … 111 115 // Draw all tiles that intersect with contentRect. 112 116 template <class T> 113 void drawTiles(const IntRect& contentRect, const TransformationMatrix&, float opacity, const T* program); 114 115 template <class T> 116 void drawTexturedQuad(GraphicsContext3D*, const FloatQuad&, const TransformationMatrix& projectionMatrix, const TransformationMatrix& drawMatrix, 117 float width, float height, float opacity, 118 float texTranslateX, float texTranslateY, 119 float texScaleX, float texScaleY, 120 const T* program); 117 void drawTiles(const IntRect& contentRect, const TransformationMatrix&, float opacity, const T* program, int fragmentTexTransformLocation, int edgeLocation); 121 118 122 119 // Grow layer size to contain this rectangle. … … 136 133 IntRect tileContentRect(const Tile*) const; 137 134 IntRect tileLayerRect(const Tile*) const; 138 IntRect tileTexRect(const Tile*) const;139 135 140 136 GC3Denum m_textureFormat; -
trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.cpp
r91720 r92255 151 151 } 152 152 153 VertexShader Quad::VertexShaderQuad()153 VertexShaderTile::VertexShaderTile() 154 154 : m_matrixLocation(-1) 155 , m_texTransformLocation(-1)156 155 , m_pointLocation(-1) 157 { 158 } 159 160 void VertexShaderQuad::init(GraphicsContext3D* context, unsigned program) 156 , m_vertexTexTransformLocation(-1) 157 { 158 } 159 160 void VertexShaderTile::init(GraphicsContext3D* context, unsigned program) 161 161 { 162 162 m_matrixLocation = context->getUniformLocation(program, "matrix"); 163 m_texTransformLocation = context->getUniformLocation(program, "texTransform");164 163 m_pointLocation = context->getUniformLocation(program, "point"); 165 ASSERT(m_matrixLocation != -1 && m_texTransformLocation != -1 && m_pointLocation != -1); 166 } 167 168 String VertexShaderQuad::getShaderString() const 164 m_vertexTexTransformLocation = context->getUniformLocation(program, "vertexTexTransform"); 165 ASSERT(m_matrixLocation != -1 && m_pointLocation != -1 && m_vertexTexTransformLocation != -1); 166 } 167 168 String VertexShaderTile::getShaderString() const 169 169 { 170 170 return SHADER( … … 172 172 attribute vec2 a_texCoord; 173 173 uniform mat4 matrix; 174 uniform vec4 texTransform;175 174 uniform vec2 point[4]; 175 uniform vec4 vertexTexTransform; 176 176 varying vec2 v_texCoord; 177 177 void main() … … 184 184 pos.xy += (complement.x * a_texCoord.y) * point[3]; 185 185 gl_Position = matrix * pos; 186 v_texCoord = pos.xy * texTransform.zw + texTransform.xy;186 v_texCoord = pos.xy * vertexTexTransform.zw + vertexTexTransform.xy; 187 187 } 188 188 ); … … 244 244 vec4 texColor = texture2D(s_texture, v_texCoord); 245 245 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha; 246 } 247 ); 248 } 249 250 FragmentTexAlphaAABinding::FragmentTexAlphaAABinding() 251 : m_samplerLocation(-1) 252 , m_alphaLocation(-1) 253 , m_fragmentTexTransformLocation(-1) 254 , m_edgeLocation(-1) 255 { 256 } 257 258 void FragmentTexAlphaAABinding::init(GraphicsContext3D* context, unsigned program) 259 { 260 m_samplerLocation = context->getUniformLocation(program, "s_texture"); 261 m_alphaLocation = context->getUniformLocation(program, "alpha"); 262 m_fragmentTexTransformLocation = context->getUniformLocation(program, "fragmentTexTransform"); 263 m_edgeLocation = context->getUniformLocation(program, "edge"); 264 265 ASSERT(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexTransformLocation != -1 && m_edgeLocation != -1); 266 } 267 268 String FragmentShaderRGBATexAlphaAA::getShaderString() const 269 { 270 return SHADER( 271 precision mediump float; 272 varying vec2 v_texCoord; 273 uniform sampler2D s_texture; 274 uniform float alpha; 275 uniform vec4 fragmentTexTransform; 276 uniform vec3 edge[4]; 277 void main() 278 { 279 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy; 280 vec4 texColor = texture2D(s_texture, texCoord); 281 vec3 pos = vec3(gl_FragCoord.xy, 1); 282 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); 283 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0); 284 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0); 285 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0); 286 gl_FragColor = texColor * alpha * min(a0, a2) * min(a1, a3); 287 } 288 ); 289 } 290 291 String FragmentShaderRGBATexSwizzleAlphaAA::getShaderString() const 292 { 293 return SHADER( 294 precision mediump float; 295 varying vec2 v_texCoord; 296 uniform sampler2D s_texture; 297 uniform float alpha; 298 uniform vec4 fragmentTexTransform; 299 uniform vec3 edge[4]; 300 void main() 301 { 302 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy; 303 vec4 texColor = texture2D(s_texture, texCoord); 304 vec3 pos = vec3(gl_FragCoord.xy, 1); 305 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); 306 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0); 307 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0); 308 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0); 309 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha * min(a0, a2) * min(a1, a3); 246 310 } 247 311 ); -
trunk/Source/WebCore/platform/graphics/chromium/ShaderChromium.h
r91720 r92255 97 97 }; 98 98 99 class VertexShaderQuad { 100 public: 101 VertexShaderQuad(); 102 103 void init(GraphicsContext3D*, unsigned program); 104 String getShaderString() const; 105 106 int matrixLocation() const { return m_matrixLocation; } 107 int texTransformLocation() const { return m_texTransformLocation; } 99 class VertexShaderTile { 100 public: 101 VertexShaderTile(); 102 103 void init(GraphicsContext3D*, unsigned program); 104 String getShaderString() const; 105 106 int matrixLocation() const { return m_matrixLocation; } 108 107 int pointLocation() const { return m_pointLocation; } 109 110 private: 111 int m_matrixLocation; 112 int m_ texTransformLocation;108 int vertexTexTransformLocation() const { return m_vertexTexTransformLocation; } 109 110 private: 111 int m_matrixLocation; 113 112 int m_pointLocation; 113 int m_vertexTexTransformLocation; 114 114 }; 115 115 … … 139 139 // Swizzles the red and blue component of sampled texel. 140 140 class FragmentShaderRGBATexSwizzleAlpha : public FragmentTexAlphaBinding { 141 public: 142 String getShaderString() const; 143 }; 144 145 class FragmentTexAlphaAABinding { 146 public: 147 FragmentTexAlphaAABinding(); 148 149 void init(GraphicsContext3D*, unsigned program); 150 int alphaLocation() const { return m_alphaLocation; } 151 int samplerLocation() const { return m_samplerLocation; } 152 int fragmentTexTransformLocation() const { return m_fragmentTexTransformLocation; } 153 int edgeLocation() const { return m_edgeLocation; } 154 155 private: 156 int m_samplerLocation; 157 int m_alphaLocation; 158 int m_fragmentTexTransformLocation; 159 int m_edgeLocation; 160 }; 161 162 class FragmentShaderRGBATexAlphaAA : public FragmentTexAlphaAABinding { 163 public: 164 String getShaderString() const; 165 }; 166 167 // Swizzles the red and blue component of sampled texel. 168 class FragmentShaderRGBATexSwizzleAlphaAA : public FragmentTexAlphaAABinding { 141 169 public: 142 170 String getShaderString() const; -
trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp
r92245 r92255 39 39 40 40 // Start tiling when the width and height of a layer are larger than this size. 41 static int maxUntiledSize = 51 0;41 static int maxUntiledSize = 512; 42 42 43 43 // When tiling is enabled, use tiles of this dimension squared. … … 51 51 : LayerChromium(owner) 52 52 , m_tilingOption(AutoTile) 53 , m_borderTexels(true)54 53 { 55 54 } … … 81 80 return; 82 81 83 const IntSize tileSize( defaultTileSize, defaultTileSize);82 const IntSize tileSize(min(defaultTileSize, contentBounds().width()), min(defaultTileSize, contentBounds().height())); 84 83 85 84 // Tile if both dimensions large, or any one dimension large and the other … … 98 97 isTiled = autoTiled; 99 98 100 // Empty tile size tells the tiler to avoid tiling. 101 IntSize requestedSize = isTiled ? tileSize : IntSize(); 99 IntSize requestedSize = isTiled ? tileSize : contentBounds(); 102 100 const int maxSize = layerRenderer()->maxTextureSize(); 103 101 IntSize clampedSize = requestedSize.shrunkTo(IntSize(maxSize, maxSize)); … … 129 127 layerRenderer(), 130 128 IntSize(defaultTileSize, defaultTileSize), 131 m_borderTexels ? LayerTilerChromium::HasBorderTexels : LayerTilerChromium::NoBorderTexels);129 LayerTilerChromium::HasBorderTexels); 132 130 } 133 131 … … 145 143 void TiledLayerChromium::setIsMask(bool isMask) 146 144 { 147 m_borderTexels = !isMask;148 145 setTilingOption(isMask ? NeverTile : AutoTile); 149 146 } -
trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h
r90963 r92255 74 74 75 75 TilingOption m_tilingOption; 76 bool m_borderTexels;77 76 }; 78 77 -
trunk/Source/WebCore/platform/graphics/gpu/TilingData.cpp
r90886 r92255 45 45 static int computeNumTiles(int maxTextureSize, int totalSize, int borderTexels) 46 46 { 47 int totalSizeWithBorder = totalSize + 2 * borderTexels;48 49 47 if (maxTextureSize - 2 * borderTexels <= 0) 50 return 0;51 52 int numTiles = max(1, 1 + (totalSize WithBorder- 1 - 2 * borderTexels) / (maxTextureSize - 2 * borderTexels));48 return totalSize > 0 && maxTextureSize >= totalSize ? 1 : 0; 49 50 int numTiles = max(1, 1 + (totalSize - 1 - 2 * borderTexels) / (maxTextureSize - 2 * borderTexels)); 53 51 return totalSize > 0 ? numTiles : 0; 54 52 } … … 82 80 83 81 ASSERT(m_maxTextureSize - 2 * m_borderTexels); 84 int x = srcPos/ (m_maxTextureSize - 2 * m_borderTexels);82 int x = (srcPos - m_borderTexels) / (m_maxTextureSize - 2 * m_borderTexels); 85 83 return min(max(x, 0), numTilesX() - 1); 86 84 } … … 92 90 93 91 ASSERT(m_maxTextureSize - 2 * m_borderTexels); 94 int y = srcPos/ (m_maxTextureSize - 2 * m_borderTexels);92 int y = (srcPos - m_borderTexels) / (m_maxTextureSize - 2 * m_borderTexels); 95 93 return min(max(y, 0), numTilesY() - 1); 96 94 } … … 135 133 } 136 134 137 IntRect TilingData::tileBoundsWithOuterBorder(int tile) const138 {139 IntRect bounds = tileBounds(tile);140 141 if (m_borderTexels)142 bounds.inflate(1);143 144 return bounds;145 }146 147 135 FloatRect TilingData::tileBoundsNormalized(int tile) const 148 136 { … … 181 169 if (!xIndex && m_numTilesX == 1) 182 170 return m_totalSizeX; 171 if (!xIndex && m_numTilesX > 1) 172 return m_maxTextureSize - m_borderTexels; 183 173 if (xIndex < numTilesX() - 1) 184 174 return m_maxTextureSize - 2 * m_borderTexels; … … 196 186 if (!yIndex && m_numTilesY == 1) 197 187 return m_totalSizeY; 188 if (!yIndex && m_numTilesY > 1) 189 return m_maxTextureSize - m_borderTexels; 198 190 if (yIndex < numTilesY() - 1) 199 191 return m_maxTextureSize - 2 * m_borderTexels; … … 239 231 *newSrc = srcRectIntersected; 240 232 newSrc->move( 241 -tileBounds.x() + m_borderTexels,242 -tileBounds.y() + m_borderTexels);233 -tileBounds.x() + ((tileXIndex(tile) > 0) ? m_borderTexels : 0), 234 -tileBounds.y() + ((tileYIndex(tile) > 0) ? m_borderTexels : 0)); 243 235 244 236 *newDst = FloatRect( … … 249 241 } 250 242 251 IntPoint TilingData::textureOffset() const 252 { 253 return IntPoint(m_borderTexels, m_borderTexels); 243 IntPoint TilingData::textureOffset(int xIndex, int yIndex) const 244 { 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); 254 249 } 255 250 -
trunk/Source/WebCore/platform/graphics/gpu/TilingData.h
r90886 r92255 62 62 IntRect tileBounds(int tile) const; 63 63 IntRect tileBoundsWithBorder(int tile) const; 64 IntRect tileBoundsWithOuterBorder(int tile) const;65 64 FloatRect tileBoundsNormalized(int tile) const; 66 65 int tilePositionX(int xIndex) const; … … 76 75 77 76 // Difference between tileBound's and tileBoundWithBorder's location(). 78 IntPoint textureOffset( ) const;77 IntPoint textureOffset(int xIndex, int yIndex) const; 79 78 80 79 private: -
trunk/Source/WebKit/chromium/ChangeLog
r92234 r92255 1 2011-08-02 David Reveman <reveman@chromium.org> 2 3 [Chromium] Remove outer border from TilingData as it's no longer needed by layer compositor for anti-aliasing. 4 https://bugs.webkit.org/show_bug.cgi?id=64942 5 6 Reviewed by James Robinson. 7 8 * tests/TilingDataTest.cpp: 9 (WebCore::TEST): 10 1 11 2011-08-02 Robert Kroeger <rjkroege@chromium.org> 2 12 -
trunk/Source/WebKit/chromium/tests/TilingDataTest.cpp
r90646 r92255 42 42 { 43 43 EXPECT_EQ(1, TilingData(16, 16, 16, false).numTiles()); 44 EXPECT_EQ(1, TilingData(1 7, 15, 15, true).numTiles());45 EXPECT_EQ(1, TilingData(1 8, 16, 16, true).numTiles());44 EXPECT_EQ(1, TilingData(16, 15, 15, true).numTiles()); 45 EXPECT_EQ(1, TilingData(16, 16, 16, true).numTiles()); 46 46 EXPECT_EQ(1, TilingData(16, 1, 16, false).numTiles()); 47 EXPECT_EQ(1, TilingData(1 7, 15, 15, true).numTiles());47 EXPECT_EQ(1, TilingData(15, 15, 15, true).numTiles()); 48 48 } 49 49 … … 110 110 EXPECT_EQ(0, TilingData(0, 1, 1, true).numTiles()); 111 111 112 EXPECT_EQ( 0, TilingData(1, 1, 1, true).numTiles());112 EXPECT_EQ(1, 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( 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());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()); 151 151 } 152 152 … … 167 167 168 168 EXPECT_EQ(0, TilingData(3, 10, 10, true).tileXIndexFromSrcCoord(0)); 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));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)); 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( 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));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)); 204 204 } 205 205 TEST(TilingDataTest, tileYIndexFromSrcCoord) … … 219 219 220 220 EXPECT_EQ(0, TilingData(3, 10, 10, true).tileYIndexFromSrcCoord(0)); 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));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)); 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( 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));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)); 256 256 } 257 257 … … 259 259 { 260 260 EXPECT_EQ(5, TilingData(5, 5, 5, false).tileSizeX(0)); 261 EXPECT_EQ( 3, TilingData(5, 5, 5, true).tileSizeX(0));261 EXPECT_EQ(5, 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( 3, TilingData(5, 6, 6, true).tileSizeX(0));266 EXPECT_EQ( 3, TilingData(5, 6, 6, true).tileSizeX(1));265 EXPECT_EQ(4, TilingData(5, 6, 6, true).tileSizeX(0)); 266 EXPECT_EQ(2, 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( 3, TilingData(5, 8, 8, true).tileSizeX(0));271 EXPECT_EQ( 3, TilingData(5, 8, 8, true).tileSizeX(1));270 EXPECT_EQ(4, TilingData(5, 8, 8, true).tileSizeX(0)); 271 EXPECT_EQ(4, 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( 3, TilingData(5, 10, 10, true).tileSizeX(0));275 EXPECT_EQ(4, 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( 3, TilingData(5, 11, 11, true).tileSizeX(2));279 EXPECT_EQ(4, 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( 3, TilingData(5, 5, 5, true).tileSizeY(0));285 EXPECT_EQ(5, 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( 3, TilingData(5, 6, 6, true).tileSizeY(0));290 EXPECT_EQ( 3, TilingData(5, 6, 6, true).tileSizeY(1));289 EXPECT_EQ(4, TilingData(5, 6, 6, true).tileSizeY(0)); 290 EXPECT_EQ(2, 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( 3, TilingData(5, 8, 8, true).tileSizeY(0));295 EXPECT_EQ( 3, TilingData(5, 8, 8, true).tileSizeY(1));294 EXPECT_EQ(4, TilingData(5, 8, 8, true).tileSizeY(0)); 295 EXPECT_EQ(4, 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( 3, TilingData(5, 10, 10, true).tileSizeY(0));299 EXPECT_EQ(4, 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( 3, TilingData(5, 11, 11, true).tileSizeY(2));303 EXPECT_EQ(4, 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( 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));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)); 326 326 327 327 // Multiple tiles: … … 341 341 // with border 342 342 // positions 0, 2, 3, 4 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));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)); 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( 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));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)); 381 381 382 382 // Multiple tiles: … … 396 396 // with border 397 397 // positions 0, 2, 3, 4 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));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)); 415 415 } 416 416 … … 469 469 TEST(TilingDataTest, setMaxTextureSizeBorders) 470 470 { 471 TilingData data(8, 16, 3 0, true);471 TilingData data(8, 16, 32, 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( 6, data.numTilesX());487 EXPECT_EQ(5, data.numTilesX()); 488 488 EXPECT_EQ(10, data.numTilesY()); 489 489 }
Note: See TracChangeset
for help on using the changeset viewer.