Bonjour,
Je cherche à créer un système de ressources à la Qt (pour avoir les ressources dans l'exécutable) avec une fonction qui renvoie les informations sur les images lorsque celles-ci sont demandées (selon le nom de leur fichier sans le répertoire avant). J'ai déjà réussi à générer le C++ pour le tableau d'Uint8 de l'image (les composantes des couleurs). Je choisis les fichiers, je choisis un fichier source à créer, et je lance la compilation. Je n'ai pas terminé, les fichiers source générés ne sont pas encore utilisables.
Mais avant d'aller plus loin, j'aimerais quand même savoir si ce que je cherche à faire est viable et portable (en dehors du fait que j'utilise bien le type portable sf::Uint8).
Voici un exemple de code généré :
#include "RessourceManager.h"
void RessourceImage::registeredImages(sf::String filename, RessourceImage * img)
{
if(filename.toUtf8() == sf::string("block1.png").toUtf8()){
unsigned int pX = 37;
unsigned int pY = 37;
const sf::Uint8 pixels[] = { composantes des couleurs };
//stockage des informations dans img
else {
unsigned int pX = 0;
unsigned int pY = 0;
const sf::Uint8 pixels[] = { 0 };
// stockage des informations dans img
}
}
pX = nombre de pixels en longueur
pY = nombre de pixels en hauteur
const sf::Uint8 pixels[] = tableau des composantes des couleurs
Comme je l'ai dit je n'ai pas terminé, je ne cherche pas des critiques sur le code généré, mais bien de savoir si l'idée est bonne, conventionnelle, et si elle peut me poser des problèmes. J'ai mis le sujet ici car le système ne concerne pas qu'un module, mais tous les modules qui peuvent utiliser des ressources.
Merci d'avance.
UP.
Je reviens sur ce topic pour parler à peu près de la même chose mais cette fois, j'ai terminé un système de fichiers data qui fonctionne. [EDIT : Le fichier data permet de stocker des fichiers sous forme compressée et de restituer leur contenu dans un programme.] Le fichier data (utilisant zlib) a un index au début qui contient la liste des fichiers et leur position par rapport au début du premier fichier (se trouvant donc à la position 0). Les fichiers sont compressés à la suite, et j'ai une fonction pour renvoyer le contenu du fichier voulu (en gros le fichier original) sous forme de std::string. J'utilise un std::string parce que c'est plus facile de travailler avec une chaîne de caractères qui peux varier en taille à mon goût. J'aurais quelques questions pour pousser un peu plus ce système :
- Devrais-je découper les fichiers en plusieurs morceaux compressés, du genre plusieurs parties de 1 ko ? Quelle taille me conseilleriez-vous pour les parties ? (je tiens à utiliser sf::InputStream pour lire les musiques, c'est l'idéal dans mon cas) ;
- En parlant de InputStream, cela risque-t-il de me gêner ? Je veux dire, est ce que la fonction
bool sf::Music::openFromStream ( InputStream & stream )
lance un thread ? Si c'est le cas, alors je ne vais pas pouvoir utiliser mon fichier pour autre chose en même temps, donc lire un son à partir du même fichier. Si les std::ifstream sont optis pour le multithreading alors je suis tranquille.
- Sachant que mon système de fichiers data fonctionne (j'ai même créé un exécutable (http://www.mediafire.com/download/vlwcl6h1den6hnb/EcritureEtLecture.zip) à la 7z pour décompresser les fichiers data, ou créer des fichiers data à partir des fichiers choisis), et qu'il est portable (il écrit automatiquement en little endian, à la lecture convertit en big endian si nécessaire, et n'écrit que par octets), pourrait-il intéresser des gens ? Je veux dire, compresser plusieurs ressources dans un fichier, et pouvoir restituer leur contenu à l'intérieur d'un jeu si par exemple on veut une image, est-ce que cela intéresserait d'autres développeurs ?
- Est-ce que j'ai d'autres questions à me poser sur ce système de fichiers data ?
Merci d'avance et merci d'avoir pris le temps de lire. :p