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 :

erreur OpenGL glRenderMode


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut erreur OpenGL glRenderMode
    Bonjour à tous ,

    Voila mon problème:

    Je code un logiciel de CAO. Sur mon PC de développement le logiciel fonctionne parfaitement, or sur au moins deux autres PC il ne produit pas les même résultat que sur mon pc de dev.


    Donc ni une ni deux j'instal mon code source sur une des deux autres PC et je fait du pas a pas pour observé qu'elle est le resultat qui change, je trouve donc que la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int hits = glRenderMode (GL_RENDER);
    ne me renvoi pas la même chose sur les PC.Sur mon Pc de Dev elle me renvoi 1, tandis que sur mon autre PC elle me renvoi 0.

    Je vais donc voir mon ami Google et je trouve :
    Si une erreur est générée, glRenderMode renvoie 0 quel que soit le mode de rendu courant.
    Or je trouve sur la même page :
    La valeur de retour de glRenderMode est déterminée par le mode de rendu au moment glRenderMode est appelée, plutôt que par le mode . Les valeurs retournées pour les trois modes de rendu sont les suivantes:

    GL_RENDER
    0.
    Donc euhhhh soit j'ai pas tout compris , soit il me renvoi 0 en temps normal ET en temps pas normal.

    Bon admettons que je n'ai pas tout bien compris est que le 0 est bien une erreur.

    Je pose donc le fameux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
            if ( hits == 0)
            {
                    GLenum error = glGetError();
                    int i = -1;
                    switch( error)
                    {
                            case GL_INVALID_ENUM:
                                    i=1;
                                    break;
                            case GL_INVALID_VALUE:
                                    i=2;
                                    break;
                            case GL_INVALID_OPERATION:
                                    i = 3;
                                    break;
                            case GL_STACK_OVERFLOW :
                                    i = 4;
                                    break;
                            case GL_STACK_UNDERFLOW:
                                    i = 5;
                                    break;
                            case GL_OUT_OF_MEMORY:
                                    i = 6;
                                    break ;
                            case GL_NO_ERROR :
                                    i = -1;
                                    break;
     
                    }
    qui me renvoi GL_INVALID_OPERATION. Du coup toujours chez mon ami Google je trouve :
    GL_INVALID_OPERATION is generated if glRenderMode is executed between the execution of glBegin and the corresponding execution of glEnd.
    Mais je ne comprend pas que si le code soit le même je puisse être en même temps au bon endroit sur un PC et pas sur l'autre.

    Merci à ceux qui pourront me répondre.

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par flamme34 Voir le message
    Mais je ne comprend pas que si le code soit le même je puisse être en même temps au bon endroit sur un PC et pas sur l'autre.
    Hello,

    Pour la valeur de retour, c'est mal foutu (si ce n'est pas une erreur de la doc).
    The return value of glRenderMode is determined by the render mode at the time glRenderMode is called, rather than by mode. The values returned for the three render modes are as follows:
    La valeur de retour dépend de la valeur précédente du render mode. Sans savoir la valeur précedente, tu ne peux pas savoir si une erreur à lieu ou pas.

    Et étant donné que tu ne peux pas savoir si il y a une erreur ou pas (retourne 0 dans plusieurs cas), appeler glGetError() n'est pas utile : ça te retournera la dernière erreur rencontrée, qui n'a peut être rien à voir avec l'appel à glRenderMode.

    Tu peux par contre vérifier le mode avant et après la modification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    auto mode = glGet(GL_RENDER_MODE);
    std::cout << "avant: " << mode << std::endl;
    auto result = glRenderMode(GL_RENDER);
    if(mode == GL_RENDER) {
        assert(result == 0);
    }
    assert(glGet(GL_RENDER_MODE) == GL_RENDER);
    Pour les résultats différents selon la machine, probablement une erreur quelque part, ou un état laissé par défaut, qui à des valeurs différentes selon la version d'openGL ou les drivers, difficile de savoir.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 142
    Billets dans le blog
    150
    Par défaut
    Voici la page de documentation officielle : http://opengl.developpez.com/docs/man/man/glRenderMode (un moteur de recherche des documentations des fonctions OpenGL : http://opengl.developpez.com/docs/man/ )

    Je ne vois pas où vous avez lu votre donc (ou comment vous l'avez lu).

    Je vous conseille ce magnifique outil pour déboguer : http://jeux.developpez.com/telecharg...2347/gDEBugger il vous aidera à tracer les différents appels aux fonctions OpenGL.

    Votre code de vérifications d'erreur doit être appelé à chaque fonction OpenGL. Peut être que ce n'est pas la fonction que vous croyez qui retourne l'erreur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    Bon finalement, j'ai compris pourquoi ça ne marchait pas sur un de mes PC. il me manquait une ligne.

    Mais pourquoi ca ne marchait pas sur l'autre alors la ca me dépasse.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 142
    Billets dans le blog
    150
    Par défaut
    Cela peut être dans la faute du pilote graphique. Chaque implémentation diffère et encore plus lors de la gestion des bogues.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre éclairé
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Par défaut
    oups je viens de relire mon Message , je me suis trompé :

    Mais pourquoi ca ne marchait pas sur l'autre alors la ca me dépasse.
    c'était en fait Mais pourquoi ca marchait sur l'autre alors la ça me dépasse.

Discussions similaires

  1. erreur opengl et sfml
    Par nicodu43 dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 03/10/2011, 13h53
  2. [FAQ][OpenGL] Récupérer les erreurs OpenGL
    Par LittleWhite dans le forum Contribuez
    Réponses: 0
    Dernier message: 01/10/2010, 12h07
  3. [JAVA] Erreur OPENGL
    Par Iphelias dans le forum OpenGL
    Réponses: 2
    Dernier message: 16/01/2008, 14h37
  4. Erreur Opengl
    Par harris_macken dans le forum MATLAB
    Réponses: 1
    Dernier message: 30/11/2006, 09h28
  5. erreurs opengl avec devcpp
    Par Vermin dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/04/2004, 14h50

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