Salut,
je me penche sur un problème depuis quelque temps déjà maintenant.
Je suis entrain de me demander quelle est la façon la plus rapide de transférer des textures en réseau.
Sinon j'ai quelque idées déjà :
Au 1er lancement du client, transférer les textures du serveur vers le client, et les écrire dans un fichier. (côté client)
Au second lancement vérifier si toutes les textures sont bien les même côté serveur et côté client, sinon, transférer les textures qui manque. (pour les mises à jour par exemple)
J'écris les textures (chargées à partir d'image .png) dans un flux, chaque texture possède une taille ainsi que un tableau de pixels. (un tableau d'unsigned char)
Je sérialise les données comme ceci dans le flux en format texte : (il y a deux types de données possibles : des nombres ou bien des caractères)
Lors de l'écriture je sépare tout les caractères et les nombres par un \n et si c'est une liste de nombres ou bien de caractère alors j'écris la taille de la liste.
Lors de la lecture, si c'est un nombre, alors, je lis jusqu'à rencontré le \n avec l'opérateur>> de ifstream, si c'est un char ou un unsigned char, je lis juste un caractère avec get, si c'est un liste je lis le nombre de nombres ou bien de caractères et je lis tout les éléments un par un avec une boucle for.
Ceci me donne donc un flux avec beaucoup de ligne, mais c'est le seul moyen pour bien tout séparer et bien lire les chaînes de caractère contenant un \n, un \r et autres caractères spéciaux. (sans devoir les échapper)
Bref ceci est bien, mais, je crains que ça ne sois pas assez rapide, les images peuvent être lourde, alors, je recherche actuellement des algorithme de compression qui me permettraient de compresser et de décompresser des fichiers textes. (J'ai trouvé un algorithme mais il ne marche seulement qur pour les caractères codé sur 16 bits mais mon algorithme ne prend pas encore en charge les wstring.
De plus je ne peux pas utiliser des wchat_t vu que mes char sont les composantes rgba des pixels de ma texture en fait.
Par contre je n'ai pas trouvé grand chose concernant les caractères codé sur 8 bits, il y a des librairies opensource comme par exemple zlib mais, la plupart de ces librairies et code source que j'ai trouvé sont écris en C, en plus elles utilisent leur propre fonction pour écrire et lire dans des fichiers mais moi je veux juste une fonction de compression et de décompression, rien de plus, ni de moins.
Merci d'avance. (Je crains de devoir écrire mon propre algorithme de compression, décompression. :/)
Partager