Mon application contient une fonction courte qui copie le tampon GPU SFML (sf::RenderTexture
converti en sf::Image
) en un tableau de couleurs bidimensionnel (qui est stocké dans la RAM et traité par la CPU). Voici le code:SFML - optimiser la copie de GPU à RAM
const sf::Image image = renderTexture.getTexture().copyToImage();
for (Point_t y = 0; y < totalHeight; ++y)
{
for (Point_t x = 0; x < totalWidth; ++x)
{
const sf::Color& c = image.getPixel(x, totalHeight - y - 1);
// here processing this c variable
}
}
Le problème est: avec un écran 256x64px j'obtiens comme 20 FPS - qui est trop bas, j'ai besoin comme 50 FPS dans ma demande. Comment puis-je améliorer les performances de ce processus?
Peut-être que je devrais utiliser une bibliothèque supplémentaire qui l'accélérerait?
EDIT:
Quelqu'un a suggéré que je devrais utiliser véritable bibliothèque d'imagerie au lieu de SFML. Mais le point est que SFML est une bibliothèque parfaite pour des choses comme la rotation d'objets en temps réel etc., donc je vais coller à SFML, juste besoin d'optimisation ou d'une autre façon de copier le tampon de GPU à CPU.
Avez-vous vérifié ce qui prend la l'heure, l'appel de copie ou votre traitement? – nvoigt
À quelle fréquence vous auriez besoin d'appeler le code ci-dessus? – AlexxanderX
Le processus de copie prend cette fois. J'appelle ce code dans la boucle chaque fois que possible, j'ai besoin de 50-60 FPS donc ce code devrait s'exécuter 50-60 fois par seconde, mais maintenant il est seulement 20. Peut-être qu'il y a une autre façon de le faire? –