Toutes les textures du moteur NEL sont manipulées par des objets dérivant de la classe ITexture. Voici la hiérarchie des classes Textures :
ITexture CTextureBlank CTextureBloom CTextureBlend CTextureBump CTextureCube CTextureDLM CTextureEmboss CTextureFar CTextureFile CTextureFont CTextureGrouped CTextureMem CTextureMultiFile CTextureNear
Eléments clef de la classe texture
code/nel/include/nel/3d/texture.h code/nel/src/3d/texure.cpp
class ITexture : public CBitmap, public NLMISC::CRefCount, public NLMISC::IStreamable { ... // Membres de la classe ... TUploadFormat _UploadFormat; TWrapMode _WrapS; TWrapMode _WrapT; TMinFilter _MinFilter; TMagFilter _MagFilter; NLMISC::CSmartPtr<CTextureCategory> _TextureCategory; }
fonctions pour la *partage* des textures nommées :
// Does this texture support sharing system. virtual bool supportSharing() const {return false;} // Return the Unique ident/name of the texture, used for Driver sharing caps. // Deriver should add a prefix for their texture type. eg "file::pipoland", // "noise::4-4-2" etc.... virtual std::string getShareName() const {return std::string();}
Données sérialisées par la classe :
La classe *CTextureFile* est une implémentation de la classe ITexture qui initialise la texture à partir d'une image bitmap située sur le disque
Données sérialisées par la classe :
This kind of texture is like a texture file except that it can encode several texture at once. Only ONE texture is active at a given time. The texture being used is chosen by a call to selectTexture. NB : This is not derived from CTextureMulti because we don't store a pointer on each texture, just the name. Moreover the needed method are exposed by CTexture
class CTextureMultiFile : public ITexture // Membres uint32 _CurrSelectedTexture; std::vector<std::string> _FileNames; }
Quelques fonctions importantes :
// Set the number of textures that are encoded in that texture void setNumTextures(uint numTexs); // Set the name of the file containing the i-th texture void setFileName(uint index, const char *); // Get the number of textures uint getNumFileName() const { return (uint)_FileNames.size(); } // get the name of the file containing the texture for the given index const std::string &getFileName(uint index) const { return _FileNames[index]; }
Je me demande si cette classe n'est pas utilisée pour sérialiser les textures dépendantes des races/pays. Exemple : la texture peau référence les 5 peaux d'un animal en fonction de son origine (primes,jungle,…). Autre remarque :
// Generate the current selected texture, looking in CPath if necessary. virtual void doGenerate(bool async = false);
Ce commentaire dans le code laisse à penser que seule l'image de la texture sélectionnée pour un objet est chargée en mémoire.
(osquallo: la fonction doGenerate() génére bien la texture (le “bitmap” en gros le tableau contenant tous les octets de la texture) en mémoire a partir d'un fichier, ce qui permet de l'envoyer à la carte graphique ensuite.)
Données sérialisées par la classe :