Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Effet de bord sur texture atlas.  (Lu 5895 fois)

0 Membres et 1 Invité sur ce sujet

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Effet de bord sur texture atlas.
« Réponse #15 le: Mai 12, 2013, 10:21:19 pm »
J'avoue ne pas te suivre.

- je récupère des pixels dans un tableau temporaire
- je les update dans une texture ( qui as une image )
- je passe à la prochaine itération et je recommence

en tout cas, pas de soucis à ce niveau là. pour moi il n'y a pas de problème.

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Effet de bord sur texture atlas.
« Réponse #16 le: Mai 13, 2013, 07:38:35 am »
Au moment de l'appel de cette ligne
const sf::Uint8 * pixels = t->getTexture().copyToImage().getPixelsPtr();

Il se passe ceci:
on appelle
getTexture()
qui te renvoie une référence vers la texture courante de t.

Puis on appelle
copyToImage()
qui va créer une image au moment de cet appel (qui est donc une fonction lente). L'usage normal de cette fonction est la construction d'une véritable image comme ceci
sf::Image myImage(t->getTexture().copyToImage());

Finalement, tu récupères le pointeur de l'image que tu viens de créer, et c'est celui ci que tu stockes. A aucun moment tu ne récupères réellement l'image.

A chaque appel de copyToImage() tu récrées une image à partir de la texture actuelle, avec à chaque fois une adresse différente.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Effet de bord sur texture atlas.
« Réponse #17 le: Mai 13, 2013, 08:11:27 am »
Demande-toi qui possède (crée / détruit) le tableau de pixels vers lequel tu pointes. Quelle instance de quelle classe. Et ensuite demande-toi si l'instance en question existe encore dans ton code au moment où tu utilises le pointeur.
Laurent Gomila - SFML developer

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Effet de bord sur texture atlas.
« Réponse #18 le: Mai 14, 2013, 02:10:19 pm »
@gostron , je ne veut pas créer de véritable image.
j'ai compris que *pixels est temporaire a la fonction , je m'en sers uniquement pour récupéré les pixels que je colle dans une texture non temporaire a la fonction ( la texture atlas )
lorsque je passe *pixel a update , opengl m'en fait une copie avec glTexSubImage2D.
je ne veut pas gardé les portions que je découpe , j'en ai pas besoin par la suite.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Effet de bord sur texture atlas.
« Réponse #19 le: Mai 14, 2013, 03:30:31 pm »
Il comprend pas...

Avant l'appel à copyToImage(), le tableau de pixels n'existe pas. Après l'appel à copyToImage(), le tableau de pixels n'existe plus. Donc quand tu arrives dans ton appel à texture.update, ça fait belle lurette (une ligne de code tout entière !) que les pixels vers lesquels tu pointes ont été détruits.

C'est comme de faire ça :

const char* ptr = std::string("blop").c_str();

C'est tout aussi incorrect, parce que le tableau de caractères est stocké dans le std::string, mais celui-ci n'est stocké nulle part et est donc détruit dès la fin de l'exécution de cette ligne de code.
Laurent Gomila - SFML developer

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Effet de bord sur texture atlas.
« Réponse #20 le: Mai 14, 2013, 04:19:41 pm »
d'accord , pourquoi ça marche ? il faut donc que je passe par une image , et pas un raccourci comme je le fait donc.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Effet de bord sur texture atlas.
« Réponse #21 le: Mai 14, 2013, 04:30:31 pm »
"Ca marche" est une manifestation tout à fait valide d'un comportement indéterminé. J'ai envie de dire que c'est la pire, puisque ça te cache complètement l'erreur. Avec un bon vieux crash, au moins, tu as le nez dans ton erreur directement.

Si tu veux des détails un peu plus techniques : tant que personne n'est allé réallouer et écrire par dessus la zone mémoire où se trouvaient les pixels, ceux-ci s'y trouvent toujours.
Laurent Gomila - SFML developer

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Effet de bord sur texture atlas.
« Réponse #22 le: Mai 14, 2013, 04:42:20 pm »
ok , donc , si je m'amuse à modifier *pixel après mon update , je devrais voir le résultat.
Merci de ta patience  ;D