| ||||||
Le chargement d'une texture copiée est ce qu'il y a de plus délicat à gérer, surtout dans notre situation car nous avons deux méthodes de chargement : l'une pour les images présentes sur le disque dur et l'autre pour les textures vides. Le problème avec la copie ici c'est que la classe Texture est incapable de savoir laquelle des deux elle doit appeler. Pour le moment, elle appelle toujours la méthode charger() quelque soit le type de texture (vide ou image), ce qui va nous poser des problèmes quand on utilisera les Color Buffer car eux ont besoin de l'autre méthode. Pour éviter cela, nous devons définir manuellement les cas de chargement pour appeler la bonne méthode. Pour nous aider, nous allons nous servir du seul attribut que nous n'avons pas encore utilisé : le booléen m_textureVide. Nous lui avions donné une valeur dans tous les constructeurs un peu plus haut. Si sa valeur est égale à true (c'est-à-dire si la texture est vide) alors nous devons appeler la méthode chargerTextureVide(). Si elle est égale à false (image SDL), alors nous devons appeler la méthode charger(). Un petit bloc if sera nécessaire pour faire cette vérification :
Le constructeur complet :
Cette fois, la classe appellera la bonne méthode pour charger la texture. Problème de copie des textures non chargées Il ne manque plus qu'une condition à gérer et toute cette partie embêtante sera terminée. Celle-ci concerne les textures qui n'ont pas encore été chargées au moment de la copie, c'est-à-dire celles dont nous n'avons appelé ni la méthode charger(), ni la méthode chargerTextureVide(). Que se passerait-il à votre avis si on essayait d'en copier une dans cette situation ? Et bien la copie serait automatiquement chargée même si l'originale ne l'était pas. Cet automatisme peut causer des problèmes et engendrer des bugs dans certains cas. Pour éviter cela encore une fois, nous devons rajouter une condition qui vérifiera si la copie doit être chargée ou pas. Nous utiliserons la fonction glIsTexture() qui nous permet justement de savoir ceci :
Désormais, pour déclencher un des deux chargements, il faudra que la texture originale ait un identifiant valide. | ||||||
|