IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

glviewport(, , , ,);


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut glviewport(, , , ,);
    bonjour,
    est ce qu il y a une difference entre glViewport(0,0,(GLsizei) w,(GLsizei)h) et glViewport(0,0,w,h)???

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    A première vu non il s'agit d'un transtypage car glviewport doit attendre un GLsizei ( à vérifier dans la doc)

  3. #3
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par swibina
    bonjour,
    est ce qu il y a une difference entre glViewport(0,0,(GLsizei) w,(GLsizei)h) et glViewport(0,0,w,h)???
    Non, mais si tu as besoin d'un tel transtypage, cela veut généralement dire que ton code est mal fait.

    Jc

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par fearyourself
    Non, mais si tu as besoin d'un tel transtypage, cela veut généralement dire que ton code est mal fait.
    Pas forcément. Chez moi par exemple GLsizei est un alias pour int ; que se passe-t-il si je veux exprimer mon viewport avec des coordonnées non signées ?

    De manière plus générale, lorsqu'on développe une couche par dessus OpenGL et que l'on ne peut pas exposer ses types particuliers, il faut toujours effectuer des transtypages car on n'a aucune garantie que nos types correspondront toujours avec ceux définis par OpenGL.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Par défaut
    merci beaucoup les amis de votre aide

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    N'oublie pas le petit

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Laurent Gomila
    Pas forcément. Chez moi par exemple GLsizei est un alias pour int ; que se passe-t-il si je veux exprimer mon viewport avec des coordonnées non signées ?
    Et bien justement, si c'était un non signé trop grand, cela passerait en négatif dans glViewPort ce qui me semble pas très bon...

    De manière plus générale, lorsqu'on développe une couche par dessus OpenGL et que l'on ne peut pas exposer ses types particuliers, il faut toujours effectuer des transtypages car on n'a aucune garantie que nos types correspondront toujours avec ceux définis par OpenGL.
    Ahh non je ne suis pas d'accord.

    Un transtypage ne fait d'autre que dire au compilateur "Ouai ouai je sais, mais t'inquiéte je sais que ca va passer".

    C'est rare qu'un cast soit obligatoire si on a bien pensé le programme depuis le début. Pour ton problème de type OpenGL, si on faisait les choses proprement, on utiliserait directement les types OpenGL...

    Jc

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    C'est vrai, autant directement déclarer w et h comme des GLsizei et dans ce cas le transtypage n'a pas lieu d'être.

    Du coup pour exprimer un viewport avec des entiers non signé fait que tu ne respectes pas le prototype de glviewport non (puisque c'est un alias d'un int)?

    Ou cela voudrait dire qu'une sur une plateforme X on a un GLsizei qui est un entier signé et sur une plateforme Y un GLsizei qui est un entier non signé

  9. #9
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par hegros
    Ou cela voudrait dire qu'une sur une plateforme X on a un GLsizei qui est un entier signé et sur une plateforme Y un GLsizei qui est un entier non signé
    Cela est tout à fait possible.

    C'est aussi le problème classique du type char par exemple qui est signé sur certaines architectures et non signés sur d'autres.

    C'est pour cela qu'il vaut mieux utiliser le type d'OpenGL bien qu'on ne le fait jamais

    Jc

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ah, un peu de débat

    Et bien justement, si c'était un non signé trop grand, cela passerait en négatif dans glViewPort ce qui me semble pas très bon...
    C'est juste mon transtypage qui est mauvais. Si on était vraiment parano (mais qui utilise un viewport de 2^16 ?) on mettrait un clamp plutôt qu'un transtypage direct.
    En plus il y a une certaine contradiction dans ce que tu dis : passer un nombre négatif n'est pas bon, mais tu continuerais pourtant à utiliser des entiers signés ?
    Moi je prends le problème inversement : passer des négatifs n'est pas bon, donc je l'interdis ; à moi de mitouiller en interne pour que OpenGL ne râle pas avec mon entier non signé.

    Ahh non je ne suis pas d'accord.

    Un transtypage ne fait d'autre que dire au compilateur "Ouai ouai je sais, mais t'inquiéte je sais que ca va passer".

    C'est rare qu'un cast soit obligatoire si on a bien pensé le programme depuis le début. Pour ton problème de type OpenGL, si on faisait les choses proprement, on utiliserait directement les types OpenGL...
    J'aimerais avoir ton avis sur la question suivante : pourquoi un programme bien pensé autoriserait des viewport négatifs ? Parce que l'API sous-jacente prend en paramètre un GLsizei ?
    Et puis comme je te l'ai dit, utiliser les types OpenGL, c'est pas vraiment génial si on ne souhaite pas exposer l'API qu'on utilise. Si je fais un moteur 3D multi-API, j'utilise quoi pour mon viewport ? Des GLsizei, des DWORD ou des unsigned int ?

  11. #11
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Laurent Gomila
    Ah, un peu de débat
    En effet, c'est toujours bon, tant qu'on ne se perd pas.

    C'est juste mon transtypage qui est mauvais. Si on était vraiment parano (mais qui utilise un viewport de 2^16 ?) on mettrait un clamp plutôt qu'un transtypage direct.
    En effet, ce serait une solution plus adapté.

    En plus il y a une certaine contradiction dans ce que tu dis : passer un nombre négatif n'est pas bon, mais tu continuerais pourtant à utiliser des entiers signés ?
    Même si je sais que mon entier ne sera pas négatif dans une des zones de code, cela ne veut pas dire qu'il peut l'être dans une autre zone. Utiliser un entier signé pour un paramètre non signé n'est pas forcément dangereux ou une erreur si on sait ce qu'on fait et pourquoi on le fait.

    Moi je prends le problème inversement : passer des négatifs n'est pas bon, donc je l'interdis ; à moi de mitouiller en interne pour que OpenGL ne râle pas avec mon entier non signé.
    Oui mais il faut juste être sûr de ne pas sortir des bornes maximales des entiers. Sinon lorsque tu passeras de ton ragoût interne à OpenGL il risque d'avoir un problème.

    J'aimerais avoir ton avis sur la question suivante : pourquoi un programme bien pensé autoriserait des viewport négatifs ?
    Ah mais faut pas rester bloquer sur cet exemple, je parle d'un point de vue plus général

    Parce que l'API sous-jacente prend en paramètre un GLsizei ?
    Et puis comme je te l'ai dit, utiliser les types OpenGL, c'est pas vraiment génial si on ne souhaite pas exposer l'API qu'on utilise. Si je fais un moteur 3D multi-API, j'utilise quoi pour mon viewport ? Des GLsizei, des DWORD ou des unsigned int ?
    Si vraiment tu voulais faire quelque chose de portable, rien t'interdis de faire tes propres types et à coup de typedef d'utiliser derrière les types d'OpenGL.

    Cela ne change pas le fait qu'un transtypage ne se justifie presque jamais.

    Jc

  12. #12
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Laurent Gomila
    pourquoi un programme bien pensé autoriserait des viewport négatifs ? Parce que l'API sous-jacente prend en paramètre un GLsizei ?
    Exactement


    Citation Envoyé par Laurent Gomila
    Et puis comme je te l'ai dit, utiliser les types OpenGL, c'est pas vraiment génial si on ne souhaite pas exposer l'API qu'on utilise
    Si je fais un moteur 3D multi-API, j'utilise quoi pour mon viewport ? Des GLsizei, des DWORD ou des unsigned int ?
    Je n'ai pas la documentation de glviewport sous la main mais si cette fonction demande un GLsizei alors il faut se débrouiller pour lui passer un GLsizei ou équivalent.

    Dans le cas d'un moteur 3D multi-API pour ne pas exposer l'api alors il faudrait que tu définisses un type comme cela je pense :

    typedef GLsizei UnNom;

    ainsi le type est masqué puisque j'imagine que selon la plateforme sur laquelle tu es GLsizei est un alias d'un int ou d'un unsigned int

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. split screen - Gestion de la camera avec glViewPort
    Par arrakis42 dans le forum OpenGL
    Réponses: 4
    Dernier message: 24/05/2013, 03h27
  2. OpenGL multi fenetre sans glViewport
    Par Groove dans le forum OpenGL
    Réponses: 12
    Dernier message: 22/02/2007, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo