Partage
  • Partager sur Facebook
  • Partager sur Twitter

PyOpenGl et VBO

OpenGL.error.NullFunctionError

    9 juillet 2010 à 15:41:28

    Bonjour,
    J'essaye d'utiliser OpenGL en python, mais j'ai un probleme quand je veux utiliser les VBO(vertex buffer object)
    Quand j'appelle:
    glGenBuffers(1)
    

    L'exception suivante est lancee:
    OpenGL.error.NullFunctionError: Attempt to call an undefined function glGenBuffers, check for bool(glGenBuffers) before calling


    Que faire? :(
    • Partager sur Facebook
    • Partager sur Twitter
      10 juillet 2010 à 0:14:06

      Je ne connait pas PyOpenGL, mais d'après le message d'erreur, tu essaye d'appeler une fonction non définie :-° .
      Est-ce-que tu pourrait envoyer le bout de code qui contient l'appel à :
      glGenBuffers(1)
      

      Aussi, sur quel OS est-tu ? Quel est ta version python ?
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2010 à 2:07:53

        Citation : dodelria

        Je ne connait pas PyOpenGL, mais d'après le message d'erreur, tu essaye d'appeler une fonction non définie

        :o Comment as tu fais pour le savoir?

        Sinon le meme probleme persiste quelque soit la version de python, je crois que c'est plutot la version de PyOpenGL qui compte(j'ai la 3.0.0-0ubuntu1)

        Voici le traceback complet:
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "/usr/lib/pymodules/python2.6/OpenGL/wrapper.py", line 1284, in __call__
            return self.finalise()( *args, **named )
          File "/usr/lib/pymodules/python2.6/OpenGL/wrapper.py", line 555, in wrapperCall
            result = self.wrappedOperation( *cArguments )
          File "/usr/lib/pymodules/python2.6/OpenGL/platform/baseplatform.py", line 299, in __call__
            self.__name__, self.__name__,
        OpenGL.error.NullFunctionError: Attempt to call an undefined function glGenBuffers, check for bool(glGenBuffers) before calling
        
        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2010 à 3:11:50

          En fait, vu que tu avait l'air d'appeller la fonction dans un bon contexte, je me pensais aussi que sa venais de la version de PyOpenGL. Lorsque je te demandais de me passer le bout de code c'était pour tester de mon côté si sa marchais ^^.

          Je ne voit vraiment pas ce que sa peut être a part un bug du module en lui même. Donne quand même ton code pour que je puisse le tester (Sauf si tu ne veut pas :D ).
          • Partager sur Facebook
          • Partager sur Twitter
            11 juillet 2010 à 4:11:04

            Citation : dodelria


            Je ne voit vraiment pas ce que sa peut être a part un bug du module en lui même. Donne quand même ton code pour que je puisse le tester (Sauf si tu ne veut pas :D ).

            Je ne pourrais jamais dire non a quelqu'un qui essaye de m'aider. Voici le bout de code pour tester(j'utilise la SFML pour ouvrir la fenetre et charger le contexte)(le strict minimum, le reste du code n'a pas trop de rapport avec le probleme, mais si tu insiste, je le donne):
            from OpenGL.GL import *
            from OpenGL.GLU import *
            from PySFML import sf
            # Creation du contexte OpenGL
            app = sf.Window(sf.VideoMode(800, 600, 32), "OPENGL")
            glGenBuffers(1)
            


            PS: les ElementArray marche nickel par contre
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              11 juillet 2010 à 11:08:17

              Et avec l'extension ARB? Ca fait pareil?

              glGenBuffers n'a pas 2 paramètres?

              from OpenGL.raw import GL
              buffer = GL.GLuint(0)
              glGenBuffers(1, buffer)
              



              • Partager sur Facebook
              • Partager sur Twitter
                11 juillet 2010 à 16:54:34

                Citation : fred1599

                Et avec l'extension ARB? Ca fait pareil?

                Ca existe aussi sous Python?
                (je sais qu'il existe un sous module ARB de OpenGL.GL, mais je ne sais pas comment l'utiliser)
                glGenBuffers n'a pas 2 paramètres?


                Citation : fred

                glGenBuffers n'a pas 2 paramètres?


                Ca c'est en C, pas en Python.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  11 juillet 2010 à 16:57:25

                  Euh, non regarde mon code ci-dessus, j'en ai bien 2 des paramètres. Mais bon tu me diras, j'y connais pas grande chose, donc je vais pas m'avancer.

                  Et puis il est indiqué dans la doc aussi : http://pyopengl.sourceforge.net/docume [...] Buffers.xhtml
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 juillet 2010 à 17:33:20

                    Bah essaye, si tu lui donne deux argument, il rale:
                    ValueError: glGenBuffers requires 1 arguments (n), received 2: (1, [])
                    

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      11 juillet 2010 à 18:48:37

                      En effet j'ai vérifié, j'ai le même message d'erreur.

                      Je ne peux plus t'aider, désolé :(
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 juillet 2010 à 22:42:43

                        Rebonjour, j'ai regardé le code source du module en question et voila ou sa bloque :

                        def load( self ):
                                """Attempt to load the function again, presumably with a context this time"""
                                from OpenGL import platform
                                if not platform.PLATFORM.checkExtension( self.extension ):
                                    return None
                                try:
                                    func = platform.PLATFORM.constructFunction(
                                        self.__name__, self.DLL, 
                                        resultType=self.restype, 
                                        argTypes=self.argtypes,
                                        doc = self.doc, 
                                        argNames = self.argNames,
                                        extension = self.extension,
                                    )
                                except AttributeError, err:
                                    return None 
                                else:
                                    # now short-circuit so that we don't need to check again...
                                    self.__class__.__call__ = staticmethod( func.__call__ )
                                    self.resolved = True
                                    return func
                                return None
                            def __call__( self, *args, **named ):
                                if self.load():
                                    return self( *args, **named )
                                else:
                                    from OpenGL import error
                                    raise error.NullFunctionError(
                                        """Attempt to call an undefined function %s, check for bool(%s) before calling"""%(
                                            self.__name__, self.__name__,
                                        )
                                    )
                        


                        Donc il renvoie ce message d'erreur lorsqu'il arrive pas à charger la fonction. Il ce pourrait alors que le driver que tu as ne supporte pas le truc en question. J'avoue que la, je suis en terrain totalement inconnu et je pense pas que je pourrait aller plus loin. Vérifie peut etre si ton driver est à jour sinon je sais pas trop quoi de dire. T'es sous GNU/Linux ou Windows ? Si t'es sous Windows, normalement sa à rien a voir... :-°
                        • Partager sur Facebook
                        • Partager sur Twitter

                        PyOpenGl et 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