I implemented fog of war recently by having a solid black RenderTexture and a semi-transparent RenderTexture.
The player's FOV is drawn onto each of the layers and only the semi-transparent one clears it's self.
The textures are large, 8000, 8000 pixels but only the semi-transparent texture produces poor performance due to the "haze.clear(sf::Color::Color(0, 0, 0, 190));"
Why does the clear() take so long?
From inside my game loop:
haze.clear(sf::Color::Color(0, 0, 0, 190)); // This is very expensive
haze.display();
sf::VertexArray vArray = getViewCone(player->GetView(), player->GetCenter());
haze.draw(&vArray[0], vArray.getVertexCount(), vArray.getPrimitiveType(), sf::BlendNone);
fogOfWar.draw(&vArray[0], vArray.getVertexCount(), vArray.getPrimitiveType(), sf::BlendNone);
window.clear();
window.draw(sBackground);
rootNode->Draw(window);
//joypadInfo(window);
player->Draw(window);
for (auto enemy : enemies)
enemy->Draw(window);
window.draw(sf::Sprite(fogOfWar.getTexture()));
window.draw(sf::Sprite(haze.getTexture()));
window.display();
Link to video: https://www.youtube.com/watch?v=0eeR_hz5WII