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 :

No OpenGL context is current on this thread exception


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut No OpenGL context is current on this thread exception
    Bonjour,
    Pour des raisons d'optimisation, j'aimerai calculer mes textures en dehors de la méthode display qui s'exécute d'une manière infinie. La création de mes modèles se fait d'une manière dynamique à la demande de l'utilisateur lorsque il appuit sur un bouton.
    Dans le méthode actionPerformed() du bouton, je charge mon modèle ainsi que les textures dans des vecteurs. Ces vecteurs je les utilise dans la méthode display() pour afficher le rendu de la scène. Mais, en chargeant les textures (en utilisant le code ci-dessous), j'ai l'erreur "No OpenGL context is current on this thread".
    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
     
    try 
        		            {
        			          tex = TextureLoader.readTexture(rs.getString("texture_url"));
        		            } 
        		           catch(IOException e) 
        		            {
        			          System.err.println("Unable to load texture : ");
        		            }
     
        		           if( tex != null )
        		           {
        		        	  PolygonTexture = tex.toGL(this.getGL(),this.getGLU(),false);
        		           }
        		           else
        			       {
        		        	   PolygonTexture = -1;
        			       }
    Donc l'erreur provient du chargement des texture qui se fait dans une autre méthode autre que init() et display().
    Comment pourrais-je charger ces textures méthode autre que init() et display() sans avoir l'erreur "No OpenGL context is current on this thread"?
    Merci d'avance.

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Salut,

    est-ce que tu effectues un wglMakeCurrent (où l'équivalent, là c du code Win32) avant de creer tes textures?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 141
    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 141
    Billets dans le blog
    150
    Par défaut
    Les problèmes de context, viennent à cause de la non initialisation d'OpenGL. Je dirai, que votre thread, a démarré avant l'initialisation ( soit la création ) de la fenêtre.
    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é
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Citation Envoyé par ShevchenKik Voir le message
    Salut,

    est-ce que tu effectues un wglMakeCurrent (où l'équivalent, là c du code Win32) avant de creer tes textures?
    Non, j'utilise pas un wglMakeCurrent.

    Citation Envoyé par LittleWhite Voir le message
    Les problèmes de context, viennent à cause de la non initialisation d'OpenGL. Je dirai, que votre thread, a démarré avant l'initialisation ( soit la création ) de la fenêtre.
    Normalement les méthodes init() et display() s'exécute dés l'ouverture de l'application. Donc, je crois que, en appuiant sur un bouton de l'application, le thread démarre aprés l'initialiation de la fenêtre.

  5. #5
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Re,

    Non, j'utilise pas un wglMakeCurrent.
    Si tu es sûr qu'un contexte a été créé auparavant, ce que LittleWhite te conseillais de vérifier, essaie de le rendre explicitement actif avec un wglMakeCurrent (ou l'équivalent en fonction de la plateforme sur laquelle tu développes) juste avant de créér tes textures.

    autre question: ton application est-elle multithreadée? si oui assure-toi que le contexte est bien partagé entre les threads (pas sûr que ce soit possible, je n'ai encore jamais fait de multithreadé). Au pire essaie de mettre la création de textures dans le même thread que Init et Display.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 141
    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 141
    Billets dans le blog
    150
    Par défaut
    Je pense ( du moins Khronos le spécifie dans le spécification de EGL ( qui est une couche de gestion des context et windowing system ) ) que les contexts sont partagées dans les threads.
    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.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Citation Envoyé par ShevchenKik Voir le message
    Re,
    autre question: ton application est-elle multithreadée? si oui assure-toi que le contexte est bien partagé entre les threads (pas sûr que ce soit possible, je n'ai encore jamais fait de multithreadé). Au pire essaie de mettre la création de textures dans le même thread que Init et Display.
    Non, mon application n'est pas multi_threadée. Je vais essayer de spécifier explicitement le contexte avec l'instruction wglMakeCurrent.

Discussions similaires

  1. SDL/Opengl : Probleme de texture avec les thread
    Par tektotodu96 dans le forum OpenGL
    Réponses: 3
    Dernier message: 25/04/2011, 01h42
  2. [Thread] Exception levé
    Par GLDavid dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 10/08/2006, 15h50
  3. [VB.NET 2.0] Cross-Thread Exception
    Par guillaume1998 dans le forum Windows Forms
    Réponses: 13
    Dernier message: 30/01/2006, 18h16
  4. [thread] Exception non catchée
    Par mammistegon dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 22/11/2004, 21h43

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