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

Langage Delphi Discussion :

Shader OpenGL dans Delphi XE5


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut Shader OpenGL dans Delphi XE5
    Bonjour,

    Je me suis lancé à travailler avec OpenGL dans Delphi XE5.
    Ca marche pas mal mais comme quelquefois j'ai un très grand nombre d'objets et que je voudrais utiliser le shader et sachant après vérification que la version installée de opengl était 3.0.1, j'ai écrit des lignes de fonctions GLSL. Aucune n'a été acceptée.
    Est-ce que c'est normal ? faut-il ajouter une ou des dll ?
    Voilà mon problème .

    Merci d'avance pour réponse
    Cordialement,

    Fred

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Tu as une ligne d'erreur ou quelque chose ?
    Sinon, non accessible : vérifie les répertoires, y compris celui d'exécution.
    A défaut, je dirais que tu auras plus de chance sur le forum Delphi.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Tu les as écrites où, ces lignes de GLSL ?
    OpenGL 3.0.1 n'existe pas...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Excuse-moi c'était Version 3.1.0.
    Je viens de lire que GLSL était un langage très spécial et très performant.
    J'ai essayé dans mon programme n'utilisant que des fonctions GL et GLU et qui, du reste, fonctionne bien, d'ajouter des fonctions qui étaient propres à GLSL que j'ai trouvé dans des tutos et le bouquin approprié de base de GLSL.
    Voilà. Comme j'ai vu que Delphi ne reconnaissait pas du tout ces instructions ou fonction, je me suis dit qu'il fallait peut-être ajouter de drivers ou dll...

    Cordialement,

    Fred

  5. #5
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Les shaders ne sont pas du code que tu compiles comme un programme C, C++ ou Delphi.
    Il faut les stocker dans un string, et le donner à un shader, via la fonction glShaderSource.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bon, je vais donc potasser le bouquin que j'ai.
    Existe t'il des exemples, tutos de programmation sous delphi ou C++ (même pour un cube) de ce shader ?

    Merci encore,
    Fred

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Dans ma signature, tu as un tutoriel OpenGL "moderne", qui utilise les shaders.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour DJ59,
    Bon, j'avais déjà parcouru ce lien pour le shader.
    J'ai compris que l'idée était d'écrire un fichier texte incluant le programme en langage GLSL. Ensuite, une compilation fournira un executable.
    Le problème est que je travaille en Delphi et je dois y rester parce que je travaille avec plusieurs programmes que j'ai créé dans cet EDI et je suis confortable avec celui-ci.
    Par exemple, est-ce que l'instruction ou l'action de compilation sera aisée à utiliser dans mon programme delphi sans y ajouter des utilitaires ?
    Dans l'opengl 3.1.0 qui est utilisé dans le delphi que j'ai y a-t'il cette instruction de compilation du fichier texte créé ?

    Cordialement,

    Fred

  9. #9
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut Shader Opengl dans delphi XE5
    Bonjour,

    J'ai OpenGL (version 3.1.0) installé d'origine sous delphi XE5.
    Je travaille avec un écran de pc portable thinkpad.
    Je voudrais utiliser le langage Shader.
    Puis-je avoir un exemple simple d'utilisation de GLSL dans delphi.
    Y a t'il des ouvrages ou tutos ?

    Merci d'avance,

    Cordialement
    Fred

  10. #10
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    La compilation du shader ne se fait pas via le compilateur C, C++, Delphi ou autre, mais par OpenGL via la fonction glShaderSource que j'ai déjà citée.
    Il y a plusieurs étapes à suivre, pour créer et utiliser un shader :
    1. Créer un shader (glCreateShader)
    2. Définir le code de ce shader (glShaderSource)
    3. Compiler le shader (glCompileShader)
    4. Reproduire ces 3 étapes pour les différents shaders qui composeront le programme shader (vertex, geometry, tessellation evaluation, tessellation control, fragment, compute)
    5. Créer un programme shader (glCreateProgram)
    6. Lui attacher les différents shaders préalablement créés et compilés (glAttachShader)
    7. Linker le programme (glLinkProgram)


    Des étapes subsidiaires sont pour le moins recommandées :
    • Vérifier que la compilation d'un shader s'est déroulée correctement, via glGetShaderiv en utilisant le paramètre GL_COMPILE_STATUS et, si la compilation a échoué, utiliser la fonction glGetShaderInfoLog pour récupérer les erreurs de compilation.
    • Vérifier que le link d'un programme s'est déroulé correctement, via glGetProgramiv en utilisant le paramètre GL_LINK_STATUS et, si le link a échoué, utiliser la fonction glGetProgramInfoLog pour récupérer les erreurs de link.


    Une fois que toutes ces étapes se sont déroulées correctement, tu te retrouveras avec le programme shader (créé en étape 5) utilisable, via la fonction glUseProgram, à appeler avant l'appel d'une fonction de dessin (glDrawElements, glDrawArrays...).

    Je rappelle que ce sont des fonctions OpenGL, donc à appeler dans ton code source comme du code habituel, il n'est pas question ici d'exécutable supplémentaire, ou d'étape supplémentaire avant ou après la génération de ton exécutable.

    Tu trouveras une description plus précise de ce qu'est un shader ici : (en anglais, mais très complet, pour peu qu'on suive les liens ) https://www.khronos.org/opengl/wiki/Shader
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  11. #11
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Je vous remercie grandement pour vos explications DragonJoker59.
    D'après ce que je viens d'y lire, les instructions glcreateshader et gluseprogram doivent être reconnues de mon source si opengl est dans le "uses" de l'unité.
    Eh bien, si c'est le cas, malheureusement, l'EDI ne reconnait pas ces fonctions ? le source ne peutpas être compilé.
    Pourtant, la version de l'opengl est 3.1.0.
    Je pense, et j'ai surement tord, que c'est parce que je travaille avec un écran de portable de 12" !!! ???

    Qu'en pensez-vous ?
    Comment y remédier ?

    Merci encore,
    Cordialement,

    Fred
    PS tout le reste de opengl fonctionne très bien dans mon programme.

  12. #12
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    Le truc, c'est que ces fonctions ne sont pas dans OpenGL 1.0, qui est dans le header de base fourni par Microsoft (en C ou C++) donc il faut normalement charger soi-même les pointeurs de fonction (en C ou en C++), du coup, en delphi je ne sais pas comment ça marche.
    En cherchant "OpenGL shaders delphi", je suis tombé là-dessus, ça pourra peut-être t'aider : https://github.com/neslib/DelphiLear...ki/1.3-Shaders
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  13. #13
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour et merci DragonJoker59 pour toutes vos réponses.
    J'ai le livre opengl superbible (4ème edition). Dans mon delphi il y a opengl 3.1.0.
    Je ne comprends pas.
    Dans le livre qui utilise opengl 2.1, il y a les fonctions "glbindbuffer", gluseprogram, glcreateshader et plein d'autres que mon EDI n'accepte et ne reconnait pas.
    Je ne comprends rien.
    Je ne peux même pas utiliser les tutos sur le shader de "learn Opengl"....
    Est-ce que Embarcadero n'a mis qu'une version allégée d'Opengl 3.1.0 dans mon Delphi XE5 ???
    C'est vrai qu'il parle de Delphi Tokyo 10.2.
    Comment faire pour avoir un vrai openGL 3.1 ou + dans mon Delphi.

    Sinon, pour mon travail je ne fais pas de l'animation. Je conçois des bâtiments avec des poteaux et voiles.
    Je voudrais juste accélérer ma géométrie (modelview)

    Peut-être que l'utilisation de vertex arrays serait intéressant. Qu'en pensez-vous ?

    Merci d'avance,

    Cordialement,

    Fred

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Je viens de voir que le site vers lequel vous m'avez dirigé utilise opengl 3.3 ou +.
    Il crée glgenbuffers et peut-être d'autres fonctions.

  15. #15
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 477
    Points
    11 477
    Billets dans le blog
    11
    Par défaut
    glGenBuffers est disponible depuis OpenGL 2.1...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  16. #16
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour
    Je reviens vers ce forum après être passé par celui de programmation jeux 2D-3D qui après m'avoir aidé grandement sur certains sujets concernant opengl m'ont redirigé vers vous.
    J'ai delphi XE5 et utilise depuis peu l'opengl mis dans Delphi (je n'utilisais pas GLScene mais seulement opengl). J'ai vérifié par glgetstring(GL_VERSION) qu'elle était 3.1.0.
    Le problème est que quand je veux utiliser les fonctions "glbindbuffer", "gluseprogram" et plein d'autres fonctions d'opengl déjà valables dans la version 2.1, le source de l'EDI me rejette en me signalant que la fonction n'est pas connue (il y a "opengl" dans le "uses").
    Même les spécialistes de jeux 2D 3D de votre site ne comprennent pas.
    Est-ce que Embarcadero a allégé les fonctions d'Opengl ?
    Dans ce cas que faut-il faire pour avoir une vrai version 3.1 ou plus fonctionnant sous delphi XE5 ?

    Cordialement,

    Fred

  17. #17
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par AlfredKr Voir le message
    Le problème est que quand je veux utiliser les fonctions "glbindbuffer", "gluseprogram" et plein d'autres fonctions d'opengl déjà valables dans la version 2.1, le source de l'EDI me rejette en me signalant que la fonction n'est pas connue (il y a "opengl" dans le "uses").
    Pas sûr que ça suffise.
    Du temps où j'en faisais, j'avais ces bibliothèques dans mes uses :
    OpenGL, GL, Glut, GLAUX, GLext

    S'il te manque des bibliothèques, il faut les ajouter à ton projet.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Points : 117
    Points
    117
    Par défaut
    Bonjour Lung,

    Je veux pas utiliser glut, on me l'a déconseillé.
    L'extension non plus mais je ne connais pas GL.
    faut'il télécharger le dll de gl, son dcu ou autre ? où le télécharger ? et dans quel répertoire le mettre ?

    Merci d'avance,

    Fred

  19. #19
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 046
    Points : 40 962
    Points
    40 962
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je crois que vous n'avez pas compris, Lung vous indique d'utiliser les unités pas d'installer d'autres composants.
    Embarcadero a scindé en plusieurs unités pour des questions pratiques.
    En faisant une recherche dans chacune des unités citées vous trouverez certainement où se situe les fonctions recherchées et supprimerez les autres
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  20. #20
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    Delphi est déjà livré avec l'unité OpenGL, mais celle-ci est obsolète .
    Par conséquent, je conseille à tout le monde de ne pas utiliser cet en-tête,
    d'autant plus qu'il manque la plupart des fonctionnalités actuelles d'OpenGL.

    je prefere utiliser dlgOpengl que tu trouvera ici
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 30
    Dernier message: 12/12/2013, 09h37
  2. Shaders dans OpenGL 4
    Par forum dans le forum Contribuez
    Réponses: 0
    Dernier message: 10/07/2012, 20h37
  3. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 16h11
  4. [Débutant] Modifs dans Delphi
    Par J-P-B dans le forum XMLRAD
    Réponses: 6
    Dernier message: 20/06/2003, 15h55

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