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 :

[OpenGL] PBO ok avec Intel mais pas avec NVIDIA - OpenTK


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 9
    Points
    9
    Par défaut [OpenGL] PBO ok avec Intel mais pas avec NVIDIA - OpenTK
    Bonjour à tous,

    Sur mon PC j'ai deux cartes graphiques. une Intel HD Graphics 4600 et une NVIDIA Quadro K1100M.

    J'utilise OpenGl 4.x avec OpenTK et un soft en C# sous Visual 2015.

    J'envois au GPU une image à 8Hz, j'effectue un traitement et une visualisation puis je récupère l'image traitée dans le CPU à l'aide des PBO.

    Je demande l'écriture de l'image dans m_PboWrite et je viens la lire à la frame suivante grâce au flip de m_PboWrite et m_PboRead.

    Le code suivant récupère l'image:

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
            private void SaveWithPBO( string Name )
            {
     
                int W = m_Width;
                int H = m_Height;
     
                int Bulle = m_PboRead;
                m_PboRead = m_PboWrite;
                m_PboWrite = Bulle;
     
                GL.BindTexture( TextureTarget.TextureRectangle, m_TextureOut );
     
                GL.BindFramebuffer( FramebufferTarget.Framebuffer, m_FBO );
                GL.ReadBuffer( ReadBufferMode.ColorAttachment0 );
     
                GL.BindBuffer( BufferTarget.PixelPackBuffer, m_PboWrite );
                GL.ReadPixels( 0, 0, W, H, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero );  // demande de lecture non bloquante;
     
                GL.BindBuffer( BufferTarget.PixelPackBuffer, m_PboRead );
                IntPtr Data = GL.MapBuffer(BufferTarget.PixelPackBuffer, BufferAccess.ReadOnly); // lecture de la frame précédente
     
     
                Bitmap bmp = new Bitmap(W, H);
                BitmapData bmpdata = bmp.LockBits(new Rectangle(0, 0, W, H), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                IntPtr ptr = bmpdata.Scan0;
                long size =  (long)(W * H * 4 );
                unsafe
                {
                    Buffer.MemoryCopy( Data.ToPointer(), ptr.ToPointer(), size, size );
                }
     
                bmp.UnlockBits( bmpdata );
     
                SaveToDisk( ref bmp, Name );
     
                GL.UnmapBuffer( BufferTarget.PixelPackBuffer );
     
                GL.BindBuffer( BufferTarget.PixelPackBuffer, 0 );
     
     
            }
    A noter que je n'écris l'image sur le disque que de temps en temps (1 frame / 100) voir je commente la ligne SaveToDisk.

    Tout fonctionne très bien, sauf ......

    Le code ci-dessus est super efficace avec la carte Intel. Il y a bien une lecture asynchrone non bloquante et je peux tenir ma fréquence de 8Hz sans problème.

    Par contre quand j'exécute le MEME soft avec la carte NVIDIA (à priori plus performante) les appels deviennent bloquant et ma fréquence chute de moitié. J'obtiens les mêmes performances qu'avec un simple glGetTextImage.

    Y a-t-il une particularité de NVIDIA que j'ignore?

    Merci pour votre aide et vos idées.

    Lionel

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    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 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Peut être il y a un blocage lié à la fréquence de rafraichissement ?
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci pour la réponse mais je n'y crois pas trop.

    C'est le même soft que je lance soit avec la carte intégrée soit avec le processeur NVidia.

    De plus j'ai un oscillo branché sur certains signaux, dont la fréquence de rafraichissement, et je n'ai aucun problème sur le processeur Intel.

    Je penche plus pour un appel bloquant mais je ne vois ni lequel ni ou.

Discussions similaires

  1. [Débutant] combobox wpf avec du binding fonctionne avec clavier mais pas avec souris
    Par Laurent.solano dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 05/02/2016, 17h54
  2. Sa marche avec Firefox mais pas avec IE ?
    Par boolat dans le forum Flash
    Réponses: 1
    Dernier message: 30/10/2006, 14h02
  3. Réponses: 13
    Dernier message: 06/11/2005, 10h45
  4. Fonction JS qui fonctionne avec Mozilla mais pas avec IE.
    Par etiennegaloup dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/10/2005, 13h58
  5. Erreur avec IE mais pas avec Netscape
    Par Oluha dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/02/2005, 15h15

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