====== NEL : Les Textures ====== 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 ===== La classe ITexture ===== 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 _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 : - **_UploadFormat** : Énumération pouvant prendre une des 14 valeurs suivantes : "Auto", "RGBA8888", "RGBA4444", "RGBA5551", "RGB888", "RGB565", "DXTC1", "DXTC1Alpha", "DXTC3", "DXTC5", "Luminance", "Alpha", "AlphaLuminance", "DsDt". - **_WrapS** : Énumération ayant la même sémantique que celle d'OpenGL : "Repeat" ou "Clamp". - **_WrapT** : idem ci-dessus - **_MinFilter** : Énumération pouvant prendre les valeurs suivantes (voir la sémantique OpenGL) : "NearestMipMapOff", "NearestMipMapNearest", "NearestMipMapLinear", "LinearMipMapOff", "LinearMipMapNearest", "LinearMipMapLinear". Note :si le bitmap nécessite un mipmap et que ce mipmap n'est pas présente, il est construit à ce moment. - **_MagFilter** : Énumération pouvant prendre les valeurs suivantes (voir la sémantique OpenGL) : "Nearest", "Linear" - **_LoadGrayscaleAsAlpha** : booléen vrai ou faux (sémantique à définir) ===== La classe CTextureFile ===== 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 : - **_FileName** : le nom du fichier image - **_AllowDegradation** : Authorise le driver à créer des mipmaps de la texture permettant l'utilisation d'une version réduite de la texture si celle ci est loin. Plus on est loin de la texture plus une version réduite,donc dégradé en qualité et moins gourmande en calculs, sera utilisé. Plus on est loin moins on verra les détails de celle ci. ===== La classe CTextureMultiFile ===== 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 _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 : - **_CurrSelectedTexture** : numéro de la texture sélectionnée - **_FileNames** : un tableau contenant les nom des fichiers images. {{tag>NEL}}