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 :

texture from window handle


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Par défaut texture from window handle
    Bonjour,

    Est-il possible d'obtenir une texture qui représenterai le contenu d'une fenêtre ?

    Exemple:

    -J'ai deux fenêtres, une source et une destination, crées dans un même thread.
    -La fenetre de destination est associée à un context opengl.
    -Du dessin sans opengl est effectué dans la fenetre source.
    -Une texture opengl est associée à cette fenêtre source (tout le pb est là) et cette texture est mise à jour périodiquement.
    -Après chaque mise à jour, cette texture est rendu (projection/rectangle) dans la fenetre de destination.

    Sous linux et avec glx, cela fonctionne très bien au moyen de l'extension décrite ici : http://people.freedesktop.org/~davidr
    /GLX_EXT_texture_from_pixmap.txt
    et de XCompositeRedirectWindow
    Un autre exemple est celui de compiz, pour ceux qui connaissent.

    Alors, j'ai beaucoup essayé avec les pixel buffer, sans succès. Je pense que cela est fait uniquement pour la meme utilisation que les frame buffer object.
    En l'occurence, une seule fenetre est mise en jeux.
    J'espérai que ca marcherai car on peux creer un pixel buffer depuis un HDC, et donc une fenetre. Mais bon apparement, une seule fenetre.

    Une autre solution serait de capturer le contenu de la fenetre source dans un buffer classique (rien d'opengl) et de mettre à jour une texture opengl avec ce buffer. Uploader donc mais c'est ne pas ce que je veux.

    Toute remarque ou lien est le bienvenue. Merci.

    Jhon

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Peut-être qu'un shared context te sortirait du pétrin ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Par défaut
    Merci pour ta remarque.

    A moins que je manque qqch, le partage de context serait ok si je controlais le dessin avec opengl dans la fenetre source.
    Or la fenetre source est "remplie"/"dessinée", automatiquement. Je veux dire par là que j'ai juste le HWND de cette fenetre source et rien d'autre.
    (même cas que compiz par exemple (utilisant GLX_EXT_texture_from_pixmap).

    J'ai essayé cependant d'attacher le context opengl, associée à la fenetre destination, à la fenetre source de cette manière:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    on_draw_dst()
    {
    //je récupère le context de la fenetre destination
    HGLRC gl_context = wglGetCurrentContext ();
    HDC dc_dst = wglGetCurrentDC ();
     
    //win_src est le HWND de la fenetre source, la seule donnée
    HDC dc_src = GetDC (win_src);
    wglMakeCurrent (dc_src, gl_context);
     
    //je me suis que je fait pouvoir récupérer le contenu de la fenetre source
    //de la manière suivante
    glReadBuffer (GL_BACK);
    glEnable (GL_TEXTURE_2D);
    glBindTexture (GL_TEXTURE_2D, texture);
    glCopyTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, W, H, 0);
     
    ReleaseDC (win_src, dc_src);
     
    //je remet le context de la fenetre destination, courant
    wglMakeCurrent (dc_dst, gl_context);
     
    //dessin de "texture" dans la fenetre de destination
    ....
     
    }
     
    sachant que la texture est crée avec glGenTexture et glTexImage2D(..., W, H, ...., NULL)
    (un seul context HGLRC opengl donc)

    Mais j'ai l'impression que je ne peux pas accéder au back buffer de la fenetre source.

    J'ai toujours pas trouvé de solution donc.

Discussions similaires

  1. OpenGLRenderer : Cannot generate texture from bitmap
    Par thunder180 dans le forum Android
    Réponses: 2
    Dernier message: 14/05/2013, 09h00
  2. migration projet rails sur linux from windows
    Par horkets dans le forum Ruby on Rails
    Réponses: 15
    Dernier message: 14/02/2008, 14h44
  3. Réponses: 3
    Dernier message: 30/11/2006, 12h25
  4. [VB.NET]Handle Windows & Handle dot net
    Par olixelle dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 18h00
  5. [Window] Handle de fenêtre
    Par el_diablos dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 01/07/2004, 14h12

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