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 :

Exemple de création d'un contexte opengl sans fenêtre


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut Exemple de création d'un contexte opengl sans fenêtre
    Bonjour à tous,

    Ma question est simple, savez vous comment créer un contexte openGL sous Windows sans créer une fenêtre?

    J'ai envie que l'ensemble de mes traitements se fassent offscreen (hors champ), du coup pour cela j'utilise une texture input, une output et un FBO pour stocker le résultat.

    Jusqu'à présent j'utilisais Glut ou WinMain pour la création de contexte mais cela nécessitait de créer une fenêtre quitte à n'y rien afficher dedans mais je ne souhaite plus afficher du tout!!!!

    Si vous avez une idée, ou un exemple, lien, tutoriel de ode je suis preneur ^^

    Souhaitant faire des calculs sur la GPU je regarde également la programmation GPGPU avec OpenGL afin de réaliser des traitements d'image mais je ne sais si cela est adapté.

    Merci d'avance!!!!

  2. #2
    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 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Bonjour !
    Cette utilisation sans fenêtre, c'est pour une application console ?
    Parce que sinon tu as de toute façon une fenêtre (au moins la fenêtre principale) et tu as donc ce qu'il faut pour instancier un contexte.
    Sous Windows, tu peux aussi créer une fenêtre et ne pas l'afficher (en ne mettant pas le flag WS_VISIBLE).
    Sous Windows toujours, tu peux utiliser la fenêtre du bureau, via GetDesktopWindow
    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).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Salut,

    Oui c'est pour une application console.

    Merci déjà pour ta réponse.

    Voici le bout de code qui me permet de créer mon contexte OpenGL avec GLUT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	glutInit (&argc, argv);
    	glutCreateWindow("Ma fenêtre OpenGL");
    	glewInit();
    //	(*result) = n
    Et si jamais j'enlève la ligne glutCreateWindow("Ma fenêtre OpenGL"); mon programme plante dès qu'il rencontre une fonction openGL et ce que j'aimerais c'est les utiliser sans avoir besoin d'afficher une fenêtre OpenGL même si l'affichage n'est que temporaire.

    Je veux réaliser des traitements off screen dans mes textures et stocker ensuite le résultat dans mon Fbo.

  4. #4
    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 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Un de tes soucis vient du fait que tu utilises GLUT qui crée obligatoirement une fenêtre.
    Tu dois donc te passer de cette API si tu veux faire ce que tu veux.
    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).

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Ok merci, je vois et je m'en doutais un peu.

    Bon je vais faire avec dans ce cas, et dis moi rien à voir avec le topic mais sais tu comment réaliser des calculs dans une texture puis stocker le résultat dans un framebuffer?

    Je ne trouve rien de concluant sur le net, j'ai juste appris que cela nécessite d'effectuer des traitements mathématiques avec notre GPU dans les textures puis grâce à glReadPixels() on peut sauvegarder le résultat dans notre framebuffer. (Pas sûr!!!!)

  6. #6
    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 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    En utilisant les compute shaders, je ne l'ai jamais fait, mais je pense que c'est le plus adapté à ton cas.

    Sans passer par les compute shaders, je vais avancer une théorie que je n'ai jamais appliquée et que j'établis là maintenant (et je ne sais même pas si c'est valide, du coup).
    - Tout d'abord, créer la texture d'entrée et la texture de sortie, aux mêmes dimensions.
    - Créer un FBO auquel tu vas attacher la texture de sortie
    - Créer un shader qui va prendre la texture d'entrée.
    - Pour ce shader, le vertex shader est bidon (voire pas nécessaire), les calculs seront effectués dans le fragment shader.
    - Définir un viewport orthographique aux dimensions identiques à celles des textures, afin de pouvoir dire "un fragment de mon pixel shader correspond à un pixel de ma texture".
    - Effectuer le rendu.
    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).

  7. #7
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,

    Malheureusement pour toi tu ne peux avoir de contexte openGL sans fenêtre. Sous Windows, tu créer le contexte avec WGL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HGLRC    wglCreateContext(HDC hDC);
    BOOL    wglDeleteContext(HGLRC hRC);
    BOOL    wglMakeCurrent(HDC hDC, HGLRC hRC);
    BOOL    wglDeleteContext(HGLRC hRC);
    Tu va donc devoir utiliser l'API Win32 pour créer une fenêtre mais ne pas l'afficher ( Tu n'appelles pas ShowWindow()).
    Après tu fais un render to texture pour faire comme si c'était ta fenêtre

    NB: Tu peux utiliser GetDesktopWindow() et GetDC() au lieu de créer une Win32 window. A essayer
    Homer J. Simpson


  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Ok merci pour ta réponse,

    Dis moi aurais tu un exemple de rendu dans texture? du rendering off screen quoi??

    Je ne sais pas si c'est avec la fonction glReadPixels ou glDrawElements qui permet d'écrire dans la texture donc dans le framebuffer!!!!

  9. #9
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    glReadPixels comme sont nom l'indique lit les pixels....
    Sinon Google It -> http://jeux.developpez.com/tutoriels...s-une-texture/
    Homer J. Simpson


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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Je dirais même plus :
    http://jeux.developpez.com/tutoriels...s-une-texture/ (version française)
    Mais aussi :
    http://alexandre-laurent.developpez....GL/OpenGL-FBO/

    Et tout ça, c'est présent sur Developpez.com et en bon français
    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.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 26
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Afin de vérifier que mon rendu s'est bien fait dans ma texture, j'aimerais réaliser un traitement sur une image je voulais savoir si cela était possible car dans le tuto ils donnent une image vide comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // La texture dans laquelle on va dessiner
    GLuint renderedTexture; 
    glGenTextures(1, &renderedTexture); 
     
    // "Lie" la nouvelle texture créée : toutes les fonctions suivantes vont modifier cette texture
    glBindTexture(GL_TEXTURE_2D, renderedTexture); 
     
    // Donne une image vide à OpenGL (le dernier « 0 ») 
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, 1024, 768, 0,GL_RGB, GL_UNSIGNED_BYTE, 0);
    Et j'aimerais savoir si c'est possible de créer une image de cette façon et de la passer ensuite à OpenGl via glTexImage2D :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const char* src_path = NULL; 
    src_path = "lena_rgb.gif";
    checkError("Downloading Image");
    // La texture dans laquelle on va dessiner
    GLuint renderedTexture; 
    glGenTextures(1, &renderedTexture); 
     
    // "Lie" la nouvelle texture créée : toutes les fonctions suivantes vont modifier cette texture
    glBindTexture(GL_TEXTURE_2D, renderedTexture); 
     
    // Donne une image vide à OpenGL (le dernier « 0 ») 
    glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, 1024, 768, 0,GL_RGB, GL_UNSIGNED_BYTE, src_path);
    En fait je l'ai essayé mais je ne vois pas comment récupérer l'image traité depuis OpenGL

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Non, il faut que vous fassiez le chargement de l'image, comme expliqué ici : http://nehe.developpez.com/tutoriel/06-texture/ et ici aussi http://jeux.developpez.com/tutoriels...-cube-texture/
    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.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/02/2011, 16h39
  2. Context opengl, création / destruction
    Par shenron666 dans le forum OpenGL
    Réponses: 3
    Dernier message: 12/10/2007, 10h39
  3. OpenGL sans fenetre OpenGl
    Par ihuop dans le forum OpenGL
    Réponses: 10
    Dernier message: 20/04/2005, 14h33
  4. opengl sans toolkit
    Par Vermin dans le forum OpenGL
    Réponses: 9
    Dernier message: 03/02/2004, 14h44
  5. Tore en OpenGL sans utiliser glut
    Par lefort dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 20/11/2002, 16h32

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