Я просто ограничиваю зону рисование и рисую только от видимых границ(или чуть дальше)
Код
  for (int i = min.y; i < max.y; i++) {
   if (i < 0) continue;
   if (i >= heightMap) break;
   for (int j = min.x; j < max.x; j++) {
    if (j < 0) continue;
    if (j >= widthMap) break;
    TileMy* tm = Tiles[idsLayer][i][j];
    if (tm->Tiles == nullptr)continue;
    if (tm->TilesFrame == nullptr)
     target.draw(*tm->Tiles, states);
    else {
     tm->TilesFrame->getSprite()->setPosition(tm->Tiles->getPosition());
     tm->TilesFrame->getSprite()->setScale(tm->Tiles->getScale());
     target.draw(*tm->TilesFrame->getSprite(), states);
    }
   }
Код
void TiledMap::SetRegion(sf::Vector2i min,sf::Vector2i max) {
    this->min = min;
    this->max = max;
}
И при движение камеры использую 
Код
view.setCenter(posTarget);
tiledMap->SetRegion(sf::Vector2i((posTarget.x / 16) - 10, (posTarget.y / 16) - 8),
   sf::Vector2i((posTarget.x / 16) + 10, (posTarget.y / 16) + 8));
  window->setView(view);