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 :

GLSL et Delphi


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nyx
    Nyx est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Par défaut GLSL et Delphi
    Bonsoir,

    Je n'ai pas trouvé de documentation sur l'utilisation de l’OpenGL Shading Language sous Delphi si ce n'est un malheureux bout de code incompilable. D'habitude ça ne pose pas de problèmes car les exemples en c/c++ sont aisément traduisibles. Cette fois ci je bloque à la première ligne. J'ai essayé de suivre les étapes prescrites par de nombreux tutoriaux et par l'Orange Book. La première chose que j'écris est alors :

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v := glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
    Ca tourne tant que je n'appelle pas la fonction qui exécute ce code, sinon l'application plante après avoir laissé derrière elle un "acces violation". Donc aucun problème à la compilation, la fonction glCreateShaderObjectARB est d'ailleurs bien définie dans GLext.pas.

    Je m'excuse à l'avance s'il s'agit d'une erreur bête.

    J'utilise Delphi 7.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    je ne sais pas si tu connais ce site :
    http://www.delphi3d.net/

    tu y trouvera peut-etre des sources intéressantes pour t'aider à travailler avec les shaders
    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.

  3. #3
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    T'es sur que ta carte graphique/pilote prennent en charge le GLSL ? pcq à priori, la fonction CreateShaderARB n'est pas initialisé par la fonction initOpenGL, enfin, c'est ce que je pense. Peux tu nous communiquer le modèle de ta carte ?

  4. #4
    Nyx
    Nyx est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Par défaut
    Sur Delphi3D il y a effectivement un source "simplegsl". Il fait appel à une fonction LoadShaderFromFile() qui fait appel à LoadShader() qui utilise glCreateShaderObjectARB() qui stock aussi le résultat dans un GLhandleARB et qui prend aussi GL_VERTEX_SHADER_ARB en paramètre. Donc apparemment ce code ne fait rien de plus que le mien. Néanmoins simplegsl génère une exception après l'appel de la fonction glGetObjectParameterivARB().

    Ma carte graphique est une sparkle GeForce 6600 Gt.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    je te conseillerai premièrement de mettre à jour tes drivers

    ensuite, tu dois tester dans ton programme le pointeur que tu reçois pour la fonction glCreateShaderObjectARB (et pour toutes les extensions en général)

    t'es tu assuré que l'extension été gérée par ta carte avec glGetString ?
    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.

  6. #6
    Nyx
    Nyx est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Par défaut
    glGetString m'indique que GL_ARB_vertex_shader est géré.
    Comment je teste le pointeur ? Le simple appel de la fonction (sans stocker le pointeur résultant) fait planter l'appli.

    J'ai du mal à comprendre pourquoi cette fonction ne génère pas d'erreurs sur simpleglsl...

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    GL_ARB_vertex_shader est une extension, et comme toutes les extensions, avant de pouvoir l'utiliser, il faut demander à OpenGL un pointeur vers cette dernière
    en C sous windows on utilise wglGetProcAddress
    en delphi, je ne sais pas

    tu devrais regarder l'initialisation de simpleglsl, tu y trouvera peut-etre ce qu'il te manque
    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.

  8. #8
    Nyx
    Nyx est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 24
    Par défaut
    Tout s'éclaircit !
    simpleGLSL utilise glext_LoadExtension à la place de wglGetProcAddress. J'ai utilisé glext_LoadExtension () à un moment, puis je l'ai supprimé en pensant qu'il s'agissait d'une manière peu élégante de faire la même chose que glGetString().

    Je vais continuer et je vais voir si j’obtiens la même erreur que simpleGLSL.

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

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 580
    Par défaut
    glGetString permet de récupérer les infos vis à vis du contexte OpenGL que tu es en train d'utiliser
    en autres une chaine de caractères listant les extensions supportées par le contexte actif au moment de l'appel à glGetString
    et donc à partir de cette chaine, tu sais si une extension est supportée ou non

    il faut savoir que 1 extension ne veut pas dire 1 fonction
    il y a des extensions qui n'ont aucune fonction et d'autres qui en ont plusieurs dizaines

    une fois que tu as validé la présence d'une extension, tu dois initialiser les pointeurs des fonctions que tu souhaites utiliser (fonctions ayant rapport avec l'extension) en utilisant donc glext_LoadExtension

    comme tu récupères des pointeurs (de fonction) n'oublies pas de vérifier que ceux-ci ne sont pas NULL au moment où tu les récupères

    donc pour résumer tu dois :
    -rendre ton contexte opengl courant
    -appeler glGetString pour connaitre les extensions
    -pour chaque extension que tu souhaites utiliser
    >récupérer les pointeurs vers les fonctions que tu a l'intention d'utiliser (ou toutes si tu préfères)
    >vérifier que chaque pointeur est valide
    - et à partir de là tu peux utiliser l'extension
    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.

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

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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