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 :

instruction opengl : erreur mémoire


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut instruction opengl : erreur mémoire
    Hello.

    J'ai une question en peu vague mais j'espère quand même que j'aurais une réponse :

    Chaques instructions OpenGL qui se trouvent dans mes destructeurs me fait planter mon programme avec des erreurs du genre : "L'instruction à "0x????????" emploie l'adresse mémoire "0x????????". La mémoire ne peut pas être "read"."

    A savoir :
    - C'est depuis que tout mon code se trouve dans une DLL que j'ai ce genre d'erreur, avant je n'avait rien !
    - Sur Linux avec les biliothèques dynamiques (.so) je n'ait pas d'erreur de segmentation ou autre.

    Voila, j'espère que j'ai donné assez d'info pour que vous puissiez m'aider, merci d'avance.

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Voila, j'espère que j'ai donné assez d'info pour que vous puissiez m'aider, merci d'avance.
    Non, pas assez d'information divulgé.

    C'est possible d'avoir un exemple très très court ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Ti-R Voir le message
    C'est possible d'avoir un exemple très très court ?
    Difficile mais comme j'ai des erreurs à chaque destructeur où il y a des fonctions opengl, je me dit que mon code OpenGL ne peut être que bon.

    J'utilise wxWidgets pour créer un contexte OpenGL et voici ma boucle principale :
    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
    void myGLCanvas::onIdle(wxIdleEvent &event)
    {
    	try
    	{	
    		SetCurrent(*glContext);
     
    		//show scene
    		CSceneManager::instance()->show();
     
    		SwapBuffers();
    		event.RequestMore();
    	}
    	catch(std::exception &e)
    	{
    		cout<<e.what()<<endl;
    		exit(1);
    	}
    }
    Dans la fonction "show" de CSceneManager, je fait des instructions OpenGL et tout se passe très bien, puis dans le destructeur, je fait par exemple un glDeleteTextures(1, &textureID); et op une erreur.

    A noter que si la classe CSceneManager se trouve dans un fichier .cpp que je compile en .o et que je link avec le fichier .o qui contient le contexte Opengl : tout va bien.

    Mais si la classe CSceneManager se trouve dans une DLL, les appels de fonctions OpenGL qui se trouve dans son destructeur plantent...

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Le contexte OpenGL est valide dans ton thread principale, mais pas dans ta dll.

    Donc il faut créer un autre context dans ta DLL et partager le contenu avec "wglShareLists"

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    Merci pour ta réponse

    Donc toutes les commandes Opengl se trouvant dans la fonction "show" fonctionnent malgré qu'elles sont dans la DLL mais pas celle du destructeur....mouais ! Tu en est vraiment sur ?

    Ta solution m'ennuie doublement :
    1) Je voulait mettre toutes mes fonctions Opengl dans une DLL et ne surtout pas m'occuper du contexte OpenGL. Comme ça l'utilisateur de ma DLL peut l'utiliser avec wxWidget, Qt, Gtk ou autre comme il le sens.
    2) Si ma mémoire est bonne, toutes les fonctions qui commencent par "wgl" sont des fonctions non portable...et moi je veux qq chose qui fonctionne sur Windows et Linux

    Donc si quelqu'un à une solution qui pourrait m'arranger...ça serait trop bien.

  6. #6
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Le plus simple pour tester est de faire un appel à "wglGetCurrentContext" et de tester son retour dans une de tes fonctions de destruction.

    Pour la Doc des extension wgl.

    Oui les instructions wgl sont spécifiques à Windows

    Sous linux c'est glX

    Il n'y a pas d'autres moyens... faut supporter les 2.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    216
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 216
    Points : 74
    Points
    74
    Par défaut
    Je viens de trouver la solution (enfin)

    Le destructeur du contexte est exécuté avant que je fasse mes dernières opérations OpenGL ! Donc logique que ça plante. Quant à savoir pourquoi l'ordre d'exécution des destructeur n'est pas le même quand mon programme est dans un DLL, ça restera un grand mystère

  8. #8
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par Ti-R Voir le message
    Oui les instructions wgl sont spécifiques à Windows

    Sous linux c'est glX

    Il n'y a pas d'autres moyens... faut supporter les 2.
    si il y a une autre solution que je considère comme étant la meilleure : ne pas les utiliser
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  9. #9
    screetch
    Invité(e)
    Par défaut
    c'est vrai qu'en ne codant pas on ne fait pas de bug!

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

Discussions similaires

  1. Erreur mémoire insuffisante
    Par jpp81 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/01/2007, 07h31
  2. instruction SQL : erreur de syntaxe
    Par Skizo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/05/2006, 10h54
  3. [MFC] Erreur mémoire
    Par leMehdi dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2006, 16h09
  4. message d'erreur "Mémoire insuffisante"
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2005, 14h41
  5. Réponses: 1
    Dernier message: 16/05/2004, 17h56

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