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

SDL Discussion :

Accès au contexte OpenGL créé par la SDL ?


Sujet :

SDL

  1. #1
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut Accès au contexte OpenGL créé par la SDL ?
    Bonjour à tous,

    J'essaie de mettre en place un système d'affichage de caractères grâce aux bitmaps. J'utilise la SDL pour mettre en place le contexte OpenGL dans une fenêtre. Pour terminer la création des bitmaps j'ai besoin d'un accès au contexte OpenGL.

    Je n'ai rien trouvé sur le net. En farfouillant dans le code source, j'arrive par l'intermédiaire de plusieurs structures opaques, à accéder au pointeur de ce contexte... en théorie.
    Le problème est que les membres de ces structures opaques ne sont pas montrés au public, du coup je dois remettre la définition de la structure mais j'ai par la même occasion beaucoup d'autres types à définir. Enfin bref c'est vraiment tordu dans le genre, donc s'il y a une solution plus simple ...

    Pour l'instant le chemin que j'ai trouvé pour accéder au contexte est :
    current_video->hidden->gl_context

    current_video est de type SDL_VideoDevice, hidden de type SDL_PrivateVideoData.

    Dans le fichier d'en-tête pour Mac OS X (SDL_QuartzVideo.h) j'ai :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    #define gl_context (this->hidden->gl_context)
    Ce qui confirme ce que j'ai trouvé.

    Si vous avez une solution je suis preneur. Je préférerais ne pas avoir à redéfinir les structures et les types de ses membres, tout en gardant la SDL qui a l'énorme avantage d'être portable.

    Merci

  2. #2
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Simple curiosité, pourquoi as-tu besoin du contexte pour créer tes bitmaps ?

  3. #3
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Pas pour créer les bitmaps mais pour y mettre les caractères par l'intermédiaire de la fonction aglUseFont() pour Mac OS X ou wglUseFontBitmaps() pour Windows.

    Je préfère utiliser cette méthode plutôt que passer par la SDL_ttf pour des raisons de rapidité pendant l'exécution.

    P.S.: quand j'ai dit "terminer la création des bitmaps", je voulais plutôt dire "finaliser".

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Dans ce cas tu peux simplement utiliser les fonctions de WGL ou AGL permettant de récupérer le contexte courant (wglGetCurrentContext(), ...).

  5. #5
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Le problème est que le contexte étant dans une fenêtre aglGetCurrentContext() me renvoie NULL . Je n'ai pas essayé sous Windows mais je m'attends au même résultat.

    Par contre je me suis demandé si le gain de performance est si conséquent que ça. Je ne connais que la technique des bitmaps et celle des textures avec SDL_ttf. Et je ne sais pas réellement s'il existe une technique qui permette d'avoir un bon compromis qualité/vitesse (sachant que ce ne sera que pour un jeu en 2D).

  6. #6
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Spootnik Voir le message
    Le problème est que le contexte étant dans une fenêtre aglGetCurrentContext() me renvoie NULL . Je n'ai pas essayé sous Windows mais je m'attends au même résultat.

    Par contre je me suis demandé si le gain de performance est si conséquent que ça. Je ne connais que la technique des bitmaps et celle des textures avec SDL_ttf. Et je ne sais pas réellement s'il existe une technique qui permette d'avoir un bon compromis qualité/vitesse (sachant que ce ne sera que pour un jeu en 2D).
    Cela dépend si le texte change beaucoup... Au pire, génére avec la SDL_ttf les chiffres/lettres séparément et tu t'en sers comme ca.

    Jc

  7. #7
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Ce qui implique d'utiliser glBindTexture() lors du dessin de chaque caractère... je n'aime pas ça.

    À la limite vaudrait peut-être mieux préenregistrer les caractères dans une seule image, puis dessiner la partie représentant le caractère souhaité. C'est à envisager...

  8. #8
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le problème est que le contexte étant dans une fenêtre aglGetCurrentContext() me renvoie NULL
    Que veux-tu dire par "le contexte est dans une fenêtre" ? Pourquoi est-ce que cela renvoie NULL ?

  9. #9
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    Que veux-tu dire par "le contexte est dans une fenêtre" ? Pourquoi est-ce que cela renvoie NULL ?
    La SDL créé une fenêtre, puis une vue 'NSOpenGLView' dans cette fenêtre. Cette vue va gérer un objet de type 'NSOpenGLContext' qui est en fait une simple sur-couche objective-C par dessus un objet de type 'CGLContextObj' (CGL = Core OpenGL).
    CGLContextObj

    A pointer to an opaque data type that defines a context object.

    typedef struct _CGLContextObject *CGLContextObj;
    Et quant à me retourner NULL, c'est à cause du mode de création de ce contexte par la SDL, qui n'utilise pas aglSetCurrentContext().
    The current AGL rendering context, as specified by the aglSetCurrentContext function. If there is no current context, NULL is returned.

    P.S.: je viens de découvrir la méthode + (NSOpenGLContext *)currentContext;
    Je vais voir si cela résout mon problème .

  10. #10
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Bon... ça n'a pas marché. J'obtiens bien le contexte OpenGL (déjà un bon point) mais lors de l'utilisation de aglUseFont(), cette fonction appelle aglSetCurrentContext() et apparemment ça créé un conflit avec le contexte OpenGL de ma vue --> plantage.

    Je pense me tourner vers la solution du chargement de la police à partir d'une image, ce qui me permettra d'avoir à la fois une bonne qualité de texte et une certaine rapidité pendant l'exécution.

Discussions similaires

  1. Accès clef USB sans passer par la lettre de lecteur
    Par Ygster dans le forum Windows
    Réponses: 1
    Dernier message: 16/05/2006, 11h21
  2. acces d'un objet créer par un autre projet?
    Par gaoul dans le forum C++
    Réponses: 13
    Dernier message: 31/03/2006, 22h11
  3. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 09h13
  4. Réponses: 11
    Dernier message: 26/04/2005, 09h23
  5. Réponses: 9
    Dernier message: 19/08/2004, 11h03

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