Partage
  • Partager sur Facebook
  • Partager sur Twitter

[PyOpengl] Erreur etrange apres la destruction de VBO

    14 août 2010 à 21:52:04

    Bonsoir,
    J'utilise une classe VBO en python que voici:
    class VBO:
        def __init__(self, data, usage=GL_STATIC_DRAW):
            self.buffer = GL.GLuint(0)
            self.buffer = glGenBuffers(1)
            self.count = len(data)
            self.size = len(data[0])
            glBindBuffer(GL_ARRAY_BUFFER_ARB, self.buffer)
            data = numpy.array(data, dtype=numpy.float32)
            glBufferData(GL_ARRAY_BUFFER_ARB, ADT.arrayByteCount(data), ADT.voidDataPointer(data), usage)
    
        def __del__(self):
            print 'deleting vbo'
            glDeleteBuffers(1, GL.GLuint(self.buffer))
        
        def __len__(self):
            return self.count
            
        def bind(self):
            glBindBuffer(GL_ARRAY_BUFFER_ARB, self.buffer)
    
        def unbind(self):
            glBindBuffer(GL_ARRAY_BUFFER_ARB, self.buffer)
    

    Le probleme c'est que a la destruction de mon VBO, je recois les exception suivante:
    Exception OpenGL.error.NullFunctionError: NullFunctionError('Attempt to call an undefined function glDeleteBuffers, check for bool(glDeleteBuffers) before calling',) in <bound method NormalVBO.__del__ of <gfx.vbo.NormalVBO instance at 0x9b70fac>> ignored

    Ce qui est bizarre, c'est que meme si je place une autre commande OpenGl directement avant ou apres glDeleteBuffers, la dite commande ne genere aucune erreur tandis que glDeleteBuffers lance toujours l'exception. Ca n'a donc pas de rapport avec la desctruction du contexte OpenGL.
    Aussi, si je detruit manuellement(= avant la fin du programme) mes VBO, je n'ai plus d'erreur.

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      16 août 2010 à 2:12:20

      Salut,

      Que t'affiche la commande suivante ?

      print glGenBuffers.__doc__
      


      Quelle versions de PyOpenGL et d'OpenGL utilises-tu ?

      ++
      • Partager sur Facebook
      • Partager sur Twitter
        16 août 2010 à 2:39:10

        >>> glGenBuffers.__doc__
        'glGenBuffers(GLsizei(n), GLuintArray(buffers)) -> None'
        

        pour pyopengl, help(OpenGL) m'affiche:
        VERSION 3.0.1

        pour OpenGL, gl.h contient:
        * Mesa 3-D graphics library
        * Version: 7.6


        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          16 août 2010 à 21:33:26

          Tu es sûr de disposer d'un contexte OpenGL valide lors de la destruction ? A quel moment fais-tu cet appel ?
          • Partager sur Facebook
          • Partager sur Twitter
            20 août 2010 à 16:21:29

            Une autre idée :
            Tu peut retirer la ligne : self.buffer = GL.GLuint(0) car tu écrase tout de suite ton initialisation.

            et Essaye plutôt :
            glDeleteBuffers(1, self.buffer)
            • Partager sur Facebook
            • Partager sur Twitter

            [PyOpengl] Erreur etrange apres la destruction de VBO

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown