Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - r4gTime

Pages: [1]
1
Graphique / [RenderTexture] Optimisation de rendu maps
« le: Mars 02, 2021, 06:37:46 pm »
Bonjour, j'aimerais solliciter votre aide pour optimiser correctement l'affichage d'une map.
Celle-ci fait 6400*6400px, avec grosso modo trois couches à afficher :
  • Le terrain
  • Les ressources et aménagements
  • Les unités
Le rendu classique que j'utilise (draw de toutes les tuiles, bordures, ressources, unités à chaque frame) ne fonctionne pas très bien.
Même en optimisant les rendus (affichage uniquement si visible, etc..), quand on dézoome, on passe vite sous la barre des 300fps sur ma machine, avec parfois des crash sur les machines un peu moins puissantes type ordinateur portable.

J'ai tenté une méthode qui en terme d'optimisation fps donne de très bon résultats, mais j'obtiens des bugs de mémoire.
En gros, je crée un RenderTexture de 6400x6400 pour chaque couche (terrain, fog, unités...) que je mets à jour seulement quand il le faut (unité qui bouge, etc..).
Problème, j'obtiens des messages d'erreur OpenGL : OUT_OF_MEMORY m'indiquant que le rendu est impossible. Pourtant le jeu s'affiche bel et bien, à +500 fps, malheureusement j'obtiens des scintillements et pas mal d'artéfacts graphiques.

Pour résoudre ces problèmes de mémoire, j'ai tenté de créer plutôt des images 6400x6400, mais j'obtiens un crash systématique avec un message d'erreur d'allocation mémoire avec le code suivant :
for(int i = 0; i < 4; i++) mapImage[i].create(6400,6400);

Je suis assez étonné de ne pas pouvoir créer 4 images ou textures de 6400px de large, est-ce normal ?

Dernière question d'optimisation : J'ai lu un peu partout sur ce forum que changer de texture prenait pas mal de temps.
Dans ce cas, lequel de ces deux codes est le plus optimisé en terme de temps d'affichage ?
Dessiner les cases une par une en changeant à chaque fois de texture ou dessiner texture par texture ?
for(int x = 0; x < 100; x ++) {
for(int y = 0; y < 100 ; y++) {
sprite.setTexture(GetTexture(x,y));
window.draw(sprite);
}
}
 
ou bien :
for(int i = 0; i < NumberOfTexture; i ++) {
sprite.setTexture(GetTexture(i));
for(int x = 0; x < 100; x ++) {
for(int y = 0; y < 100 ; y++) {
if(CheckBonneTexture(i,x,y)window.draw(sprite);
}
}
}
 

Merci d'avance pour votre aide et vos conseils :)



2
Fenêtrage / Fonctionnement des sf::view
« le: Mai 20, 2020, 06:30:55 pm »
Bonjour, je n'ai pas bien compris le fonctionnement des View.

Jusqu'ici, je dessinais tout directement dans ma fenêtre.

Admettons que j'ai un jeu de ce type, avec un GUI, une map et une mini map :


Est-ce que je dois dessiner la map loin (par exemple en x = 1000, y = 1000) pour ne pas qu'elle s'affiche dans ma window, puis créer des views qui afficheront la map et que je placerai dans ma window ?

Que dois-je dessiner dans les view ? dans la window ?

Existe-t-il un petit code exemple pour mieux comprendre ?


Merci beaucoup pour votre aide !

3
Réseau / Mon packet reçoit toujours la même valeur
« le: Avril 16, 2020, 11:59:51 pm »
Bonjour,

J'ai un petit souci avec les packets : Quand j'envoie une valeur depuis le client vers le serveur, il reçoit la bonne valeur, mais quand je lui envoie une deuxième valeur, il reçoit toujours la première valeur.

Exemple en image en fichier joint : La console de droite teste la valeur avant de l'envoyer : 223, puis 70.
Mais le serveur (console de gauche) reçoit 223, puis de nouveau 223...

Avez-vous une idée d'où peut venir le problème ?

Merci d'avance pour votre aide.


EDIT : Problème résolu en lisant le topic suivant :https://fr.sfml-dev.org/forums/index.php?topic=22676.0
qui avait le même problème que moi ...

Merci à Laurent pour sa réponse : il faut réinitialiser le packet à envoyer avec un packet.clear()

Pages: [1]