Test rapide de la SFML

Mod Message lu Posté le 26 Jan 2008 à 18:40 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Ca y est, après avoir longtemps repoussé le test faute de temps, je me suis lancé à l'assaut de la librairie.

Premier pas, le site web de la SFML, clair et net, on sait quoi télécharger sans la moindre hésitation. C'est déjà ça de pris.

Passé le temps interminable de téléchargement (SourceForge oblige, je dirais...), j'extrais l'archive, et j'y jette un premier coup d'oeil. Fichiers includes et lib, documentations, samples, tout semble être en place et relativement bien rangé.

Je suis les instructions du tutoriel d'installation de la librairie sous Code::Blocks, ça fonctionne sans problème pour l'exemple donné (sf::Clock). Au passage, la version française est . Manque de chance, je suis d'abord tombé sur la version anglaise.
Remarque : installation d'OpenAL obligée, sinon pas de son... A voir au final ce que ça peut donner comme installation requise côté utilisateur.

Passé la prise de contact avec, je m'attele à compiler un des exemples fournis avec le SDK. Prenons le Pong, tiens. Ca commence mal : pas de Workspace de trouvé, juste un fichier CPP. Il va falloit recomposer le projet.
Petite surprise donc, et sauf erreur de ma part, les projets exemples ("samples") ne sont pas du genre "prêts à l'emploi". Ce qui est quelque peu casse-pieds lorsque l'on veut juste tester rapidement.
Je m'attelle donc à rechercher les fichiers nécessaires. Je lance Code::Blocsk, un petit copier/collé du fichier CPP, puis je me lance à la recherche des fichiers médias, planqués dans un autre dossier. Après avoir raté l'arborescence pour les fichiers médias que je m'empresse de corriger, je compile, et le tout fonctionne sans problème !


Côté code, rien à dire c'est d'une simplicité évidente. Graphismes, sons et évènements, pas de problème de compréhension, les noms sont clairs et le code convenablement commenté. A moins d'y mettre du sien, dur de ne pas s'y retrouver.

Niveau fluidité, je n'ai rien à dire non plus, ça tourne très proprement. En revanche, ça se ressent côté processeur : SFML le mange à 90% pour le seul pong. A voir si c'est réglable, j'espère bien ! Quand on a un PC qui fait un bruit infernal dès qu'il chauffe un peu, on est bien content quand un programme (2D qui plus est) ne dévore pas toutes les ressources disponibles.

Bref, au final : c'est quand même excellent ! La librairie est vraiment bien pensée (d'après la documentation) et un peu de modernité post-SDL ne faisant pas de mal, je compte donc bien me lancer plus à fond dans cette librairie pour en découvrir les tréfonds, et offrir quelques retours aux développeurs.
Affaire à suivre !
noob4ever Message lu Posté le 26 Jan 2008 à 18:50 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
Tu es sous windows ? ne te plein pas trop pour OpenAL, car les linuxiens sont très emmerdé de ce coté là ...

( moi je m'en fou je suis sous windows :lol: )

sinon, dit toi que SFML utilise des spécificitées du C++ qui par exemple, evite la copie entière d'une variable, donc moins lourd et plus rapide.

Et sur codeblocks tu as l'autocomplementation des noms des class du namespace sf ?
car chez moi c'est vraiment chiant, c'est d'ailleurs pour ça que je préfère Visual.

Par contre l'instalation sous visual 2008 est un peu plus compliqué, chez moi pas moyen d'y faire marcher avec les fichiers lib statiques, obligé de tout recompiler en dynamique.

Bonne continuation avec SFML
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Mod Message lu Posté le 26 Jan 2008 à 19:09 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Pas d'auto-complétion sous Code::Blocks, non. C'est bien pour ça que j'utilise habituellement Visual Studio sur mes projets, mais pour tester rapidement des bouts de code ou une librairie, Code::Blocks est tout à fait adapté, tout léger et rapide à charger, loin du poids de l'usine à gaz précédemment citée.
Si la SFML me correspond bien à l'usage, il est probable que je passerai l'installation sous Visual Studio.
noob4ever Message lu Posté le 26 Jan 2008 à 19:41 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
:shocked: :shocked: :shocked: toi tu es sous Visual Studio 2005 !

Visual Studio 2008 à fait un enorme bond de ce coté là, le chargement est BEAUCOUP plus rapide que codeblocks !
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Mod Message lu Posté le 26 Jan 2008 à 20:07 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
J'utilise pour l'instant plus couramment Visual Studio 2005 plutôt que la version 2008... Mais je n'ai pas ressenti beaucoup de différences entre les deux pour ce qui est du chargement ^^'. Il faudrait que je chronomètre tiens :absurd: .
noob4ever Message lu Posté le 26 Jan 2008 à 20:17 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
chez moi c'est flagrant ... tu as une bonne config ?
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Mod Message lu Posté le 26 Jan 2008 à 20:28 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Le PC sur lequel je suis en ce moment se contente des versions Express de Visual C++. Config : Athlon 64 3500+ avec 1Go de RAM et disque dur 7200 TPM, ce qui ne doit pas spécialement ralentir le chargement. Le 2008 est peut-être bien un chouia plus rapide à charger, mais c'est du genre à peine perceptible. Je comparerai avec mon portable de boulot.
noob4ever Message lu Posté le 26 Jan 2008 à 20:33 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
hum je vien de voir, mon Visual Express C# 2008 est en effet plus rapide à charger que mon visual Express C++ 2008 ( de l'ordre de deux secondes ce qui n'est pas énorme mais quand même )

je vais chronométrer Visual C# 2008 vs Visual C++ 2008, je post un nouveau message une fois fait .
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
shadosan Message lu Posté le 26 Jan 2008 à 22:19 Bulle
Avatar de shadosan
Explorateur

Messages : 194
GCPoints : 8461

Citation :

Niveau fluidité, je n'ai rien à dire non plus, ça tourne très proprement. En revanche, ça se ressent côté processeur : SFML le mange à 90% pour le seul pong. A voir si c'est réglable, j'espère bien ! Quand on a un PC qui fait un bruit infernal dès qu'il chauffe un peu, on est bien content quand un programme (2D qui plus est) ne dévore pas toutes les ressources disponibles.


ah ça, ça doit etre parce que le fps n'est pas limité (je te gage qu'il doit grimper dans les 2000 images/seconde);

Code :
sf::RenderWindow app;
...
app.UseVerticalSync(true);

while (running) {
...
}


avec ça, le fps sera à 60, et l'utilisation du processeur chutera de beaucoup.
Dernière édition le 26 Jan 2008 à 22:20
Mod Message lu Posté le 26 Jan 2008 à 22:26 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Ah, effectivement avec cette commande ça tourne toujours aussi bien et sans dévorer le processeur... Merci de l'info !
noob4ever Message lu Posté le 26 Jan 2008 à 22:40 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
hum avec cette méthode des gens on eu des problèmes ( carte graphique minable )

il y a SetFrameratLimit : http://sfml.sourceforge.net/documentation/classsf_1_1Window.htm#5544031f1d2965c00532fb5660763f33
Dernière édition le 27 Jan 2008 à 08:40
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Mod Message lu Posté le 27 Jan 2008 à 09:12 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Ca marche tout aussi dans les deux cas sur mon PC, merci à toi aussi :smile: .
Darktib Message lu Posté le 27 Jan 2008 à 10:02 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Il y a une troisieme méthode pour limiter le fps, méthode d'ailleurs possible a réaliser avec n'importe quelle librairie.
Il suffit de mettre un timer au début de la boucle, puis a la fin de la boucle regarder le temps qui reste sur ce qu'on s'etait imparti.
Par exemple :
Spoiler - Cliquez pour afficher

do
{
a = getTimer();
// boucle proprement dite



b = getTimer();
// si on s'etait imparti 5 millisecondes par boucle, on met le programme en pause s'il en reste( des ms).sinon on part sur la boucle suivante
if( b-a < 25 )
{
// se mettre en pause le temps qu'il faut
sleep( 25-(b-a) );
}
}

noob4ever Message lu Posté le 27 Jan 2008 à 10:56 Bulle
Avatar de noob4ever
Explorateur

Messages : 295
GCPoints : 48742
cette méthode est à utiliser seulement quand la bibliothèque ne propose pas de solution concernant la limite de FPS.

de + pourquoi l'as-tu mit entre balise spoiler :rolleyes:
What did C:/DARTHVADER said to C:/DARTHVADER/LUKESKYWALKER ?

I'm your folder
Darktib Message lu Posté le 27 Jan 2008 à 11:11 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Pour eviter de trop prendre de place.
Avec un code de 10 lignes, c'est inutile je reconnait, mais quand le code en question fait 150 lignes, ca devient utile.^^

Autre avantage de la méthode : on controle un peu plus les fps.
Inconvenient : un peu plus chiant a mettre en oeuvre^^
Dernière édition le 27 Jan 2008 à 11:11
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0479 secondes