@Override
  public void onUpdateTextureCoordinates(final TiledSprite pTiledSprite) {
    final float[] bufferData = this.mBufferData;

    final ITiledTextureRegion tiledTextureRegion = pTiledSprite.getTiledTextureRegion();

    final int tileCount = pTiledSprite.getTileCount();
    int bufferDataOffset = 0;
    for (int i = 0; i < tileCount; i++) {
      final ITextureRegion textureRegion = tiledTextureRegion.getTextureRegion(i);

      final float u;
      final float v;
      final float u2;
      final float v2;

      if (pTiledSprite.isFlippedVertical()) { // TODO Optimize with field access?
        if (pTiledSprite.isFlippedHorizontal()) { // TODO Optimize with field access?
          u = textureRegion.getU2();
          u2 = textureRegion.getU();
          v = textureRegion.getV2();
          v2 = textureRegion.getV();
        } else {
          u = textureRegion.getU();
          u2 = textureRegion.getU2();
          v = textureRegion.getV2();
          v2 = textureRegion.getV();
        }
      } else {
        if (pTiledSprite.isFlippedHorizontal()) { // TODO Optimize with field access?
          u = textureRegion.getU2();
          u2 = textureRegion.getU();
          v = textureRegion.getV();
          v2 = textureRegion.getV2();
        } else {
          u = textureRegion.getU();
          u2 = textureRegion.getU2();
          v = textureRegion.getV();
          v2 = textureRegion.getV2();
        }
      }

      if (textureRegion.isRotated()) {
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;
      } else {
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;
      }

      bufferDataOffset += TiledSprite.TILEDSPRITE_SIZE;
    }

    this.setDirtyOnHardware();
  }