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

Auteur Sujet: Rendre protected le texture id dans sf::Texture  (Lu 4361 fois)

0 Membres et 1 Invité sur ce sujet

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Rendre protected le texture id dans sf::Texture
« le: Mars 19, 2013, 04:03:05 pm »
Bonjour à tous :)

En ce moment, j'ai besoin de récupérer l'identifiant de texture côté OpenGL d'une image ou une texture de SFML pour le lier avec un framebuffer object et ainsi afficher un cube 3D et texturé en rotation dans la couche 2D qui sert à l'interface graphique de mon jeu 3D. D'autres choses du même type auront besoin du même procédé et de plus cela permet d'utiliser les fonctionnalités de SFML (comme la simplicité d'utilisation entre autres) pour gérer les textures sans perdre l'accès à l'identifiant pour tout travail qui se fait côté OpenGL.
J'ai été surpris de constater que la méthode GetId() pour un sf::Image ou un sf::Texture n'existait pas. en me renseignant j'ai vu aussi qu'il n'est pas possible de l'ajouter par héritage car l'ID est private. Un sujet à ce propos a été écrit par quelqu'un d'autre sur l'ancien forum : http://www.sfml-dev.org/old-forum-fr/viewtopic.php?t=1709
En lisant la réponse de Laurent, je comprends que ce type d'accès soit interdit dans un sf::Image, étant donné l'existence maintenant de sf::Texture. Par contre, sf::Texture pourrait tout à fait, à mon sens, permettre cette liberté.
Je sais bien que c'est une porte ouverte à des manipulations non-sécurisées de la texture interne, mais dans le cas d'un sf::Texture, ce que j'attends de ses méthodes c'est de me simplifier la vie, pas forcément de trop restreindre mes possibilités.

Je ne suggère pas nécessairement de rendre l'ID public, mais plus tôt protected pour permettre d'ajouter des méthodes supplémentaires par héritage, non pas dans sf::Image, mais au moins dans sf::Texture. Au programmeur d'être assez rigoureux pour éviter de faire n'importe quoi et ainsi profiter de cette liberté. Se passer par exemple de l'attachement d'une texture SFML du plan 2D avec un framebuffer par exemple, c'est assez dommage, je trouve. Autrement, il faudrait recopier les pixels, ce qui est un peu plus lent et contraire au principe du FBO (oui je donne l'exemple pour mon cas).

J'espère ne pas avoir ouvert un sujet déjà traité ici, j'ai cherché avant, mais bon :)
Qu'en pensez-vous et qu'en penses-tu Laurent ?
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Rendre protected le texture id dans sf::Texture
« Réponse #1 le: Mars 19, 2013, 06:05:18 pm »
Ton cas est le seul qui requiert d'accéder à l'identificateur de la texture. Pour tout le reste, l'accès à la texture se fait de manière indirecte, en l'ayant au préalable bindée -- chose qu'il est déjà possible de faire avec sf::Texture::bind. Du coup ça me gêne d'ajouter une fonction dans l'API pour un cas aussi particulier.
Laurent Gomila - SFML developer

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Re : Rendre protected le texture id dans sf::Texture
« Réponse #2 le: Mars 19, 2013, 11:44:30 pm »
Justement, je propose juste de baisser le niveau de protection de l'identifiant pour laisser le programmeur ajouter ses propres fonctionnalités plus spécifiques par héritage. Un utilisateur qui n'a pas ce type de besoin, se contentera d'utiliser sf::texture tel quel et l'identifiant étant protected ne pourra pas être extrait puisque sf::texture n'a pas de méthode pour ça. Dans mon cas, je ne compte pas nécessairement ajouter par héritage ce genre de méthode mais plus tôt une méthode qui prend en argument le FBO et laisse ma texture attacher son identifiant en interne. Bien sûr, ça n'empêche pas un autre programmeur d’opter pour l'extraction de l'id à l'extérieur, mais bon.
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Rendre protected le texture id dans sf::Texture
« Réponse #3 le: Mars 20, 2013, 08:44:14 am »
Je comprends. J'essayerai d'y penser une fois que les trucs urgents seront bouclés, promis. Par contre si je le fais ce sera plutôt une fonction publique qu'un truc protégé. Faire des trucs protégés dans une classe qui n'a pas vocation à être héritée, c'est un peu bizarre.
Laurent Gomila - SFML developer

Timidouveg

  • Full Member
  • ***
  • Messages: 164
    • Voir le profil
    • Démiurge - Mon jeu-vidéo en développement
Re : Rendre protected le texture id dans sf::Texture
« Réponse #4 le: Mars 20, 2013, 01:17:11 pm »
Merci beaucoup :)

En attendant, je vais modifier ma version de SFML pour ajouter une méthode à sf::texture, puisque tu propose plus tôt cette voie :) Je songe à ajouter simplement à sf::texture une méthode AttachFramebuffer(). En interne, il utilisera la fonction OpenGL glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, this->m_texture, 0).
« Modifié: Mars 20, 2013, 09:10:06 pm par Timidouveg »
C'est simple, c'est rapide, c'est libre et en plus c'est français ? Qu'est-ce que vous attendiez pour m'en parler ?

Eroy

  • Jr. Member
  • **
  • Messages: 60
    • Voir le profil
    • E-mail
Re : Rendre protected le texture id dans sf::Texture
« Réponse #5 le: Avril 30, 2013, 01:18:41 am »
Je précise juste que j'ai déjà moi aussi rencontré ce soucis et c'était pas pour faire de la 3d, alors je pense que oui, cette méthode peut être utile car on est pas les premiers et sûrement pas les derniers à avoir ce soucis.  ;D