[OpenGL] Problème avec le multitexturing, glEnd : Opération non valide

Le côté programmation du développement d'un jeu vidéo.

Problème avec le multitexturing, glEnd : Opération non valide

Messagepar bourriquet » 29 Sep 2010, 23:35

Bonjour,

J'essaye de faire marcher le multitexturing de OpenGL.
Je sais que j'ai déjà réussi il y a un moment, mais soit je m'y prends mal, soit le problème vient de mon changement d'environnement (linux -> Windows)

Je précise que j'utilise le bonding python de OpenGL, mais ça ne devrait rien changer.
Plutôt qu'un long discours incompréhensible, je vais mettre mon code (simplifié) qui marche et mon code qui ne marche pas.

Voilà ce qui marche (sans multitexturing):

Code: Tout sélectionner
while not done:
 
  glColor4f(1.0, 1.0, 1.0, 1.0)
  glEnable(GL_TEXTURE_2D)
  glBindTexture(GL_TEXTURE_2D, rayangleTexture)
  glBegin(GL_POLYGON)
           
  glTexCoord2f(0.0, 0.0)
  glVertex2f(50.0, 50.0)
           
  glTexCoord2f(1.0, 1.0)
  glVertex2f(100.0, 100.0)
           
  glTexCoord2f(1.0,0.0)
  glVertex2f(100.0, 50.0)
           
  glEnd()

  pygame.display.flip()
  done = handleEvents()
  glClear(GL_COLOR_BUFFER_BIT)


Et voilà ce qui ne marche pas (avec multitexturing) :

Code: Tout sélectionner
while not done:
 
  glActiveTextureARB( GL_TEXTURE0_ARB )
  glEnable(GL_TEXTURE_2D)
  glBindTexture(GL_TEXTURE_2D, rayangleTexture)
   
  glActiveTextureARB( GL_TEXTURE1_ARB )
  glEnable(GL_TEXTURE_2D)
  glBindTexture(GL_TEXTURE_2D, raydistanceTexture)
   
  glColor4f(1.0,1.0,1.0,1.0)
   
  glBegin(GL_POLYGON) 
 
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0)
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 0.0)
  glVertex2f(50.0, 50.0)
   
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0, 1.0)
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, 1.0)
  glVertex2f(100.0, 100.0)
   
  glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 1.0, 0.0)
  glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, 0.0)
  glVertex2f(100.0, 50.0)
 
  glEnd()

  pygame.display.flip()
  done = handleEvents()
  glClear(GL_COLOR_BUFFER_BIT)
 


Ca me donne cette erreur :

Code: Tout sélectionner
Traceback (most recent call last):
  File "E:\blabla\src\main.py", line 119, in <module>
    glEnd()
  File "C:\Python26\lib\site-packages\OpenGL\latebind.py", line 61, in __call__
    return self.wrapperFunction( self.baseFunction, *args, **named )
  File "C:\Python26\lib\site-packages\OpenGL\GL\exceptional.py", line 57, in glEnd
    return baseFunction( )
  File "C:\Python26\lib\site-packages\OpenGL\error.py", line 208, in glCheckError
    baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
   err = 1282,
   description = 'op\xe9ration non valide',
   baseOperation = glEnd,
   cArguments = ()
)
 


Et voilà mon initialisation :

Code: Tout sélectionner
pygame.init()
pygame.display.set_mode((800,600), pygame.DOUBLEBUF | pygame.OPENGL, 32)
 
glClearColor(0.0, 0.0, 0.0, 1.0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
 
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, 100, 0, 100)
glMatrixMode(GL_MODELVIEW)
 
glEnable(GL_TEXTURE_2D)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
 


Est-ce quelqu'un aurait une idée de ce qui me manque?
J'ai entendu parler d'un wglGetProcAddress qui servirait sous windows mais je n'ai pas trop compris et l'erreur qu'avait le gars n'était pas la même que moi.
N'hésitez pas si je ne suis pas assez précis ou pas assez clair.


Merci beaucoup d'avance

J.
bourriquet
Hello World, I'm new !
 
Messages: 5
Inscription: 29 Sep 2010, 23:30

Messagepar iliak » 30 Sep 2010, 08:29

Salut,


Je ne vois rien de spécial qui pourrait poser un problème. Tu peux essayer de récupérer les erreurs à chaque instruction via glGetError() et lire le résultat pour voir à quel niveau ça bloque.

Petites questions rapides et innocentes : As tu tes pilotes à jour, quelle version d'OpenGL as tu sur ta machine ?

Un rapide googleage donne ce site. Ça pourrait peut être t'aider...
- Iliak -
[http://www.mimicprod.net ArcEngine : a free 2D .Net gaming framework]
[http://www.dungeoneye.net Dungeon Eye : Remake open source de Eye of the beholder II]
iliak
Hello World, I'm new !
 
Messages: 141
Inscription: 25 Fév 2010, 14:53

Messagepar bourriquet » 30 Sep 2010, 21:50

Je comprends pas trop comment utiliser glGetError. Si je le mets sur la ligne d'après, il plante avant... ?
Et puis qu'est-ce qu'il va me dire d'autre que la trace dans la console?

J'ai la version 1.4.0.
Comment je vérifie que mes pilotes sont à jour?

Ah et je fais un glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB) qui me rend 8. Ce qui veut dire que mon archi devrait gérer les 2 textures facile, no?
bourriquet
Hello World, I'm new !
 
Messages: 5
Inscription: 29 Sep 2010, 23:30

Messagepar teto » 30 Sep 2010, 22:05

sinon y a gDebugger de pratique.
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar bourriquet » 01 Oct 2010, 09:32

Non mais sinon j'ai le debugger d'eclipse...
Donc si vous voulez connaitre la valeur de telle ou telle variable, demandez-moi.
Je ne sais juste pas du tout par où chercher...
bourriquet
Hello World, I'm new !
 
Messages: 5
Inscription: 29 Sep 2010, 23:30

Messagepar teto » 01 Oct 2010, 10:39

gDebugger debugge & profile ton code opengl (http://www.gremedy.com/) ce que ne fait pas un compilo C++. Est-ce que le plugion d'eclispe fait la mm chose ?
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar bourriquet » 01 Oct 2010, 10:49

Qu'est-ce que tu entends par "profiler" le code?
Celui que j'utilise est un debugger classique, il permet de s'arrêter à chaque ligne et de visualiser/modifier les variables...

Merci pour ton aide.
bourriquet
Hello World, I'm new !
 
Messages: 5
Inscription: 29 Sep 2010, 23:30

Messagepar bourriquet » 08 Oct 2010, 15:21

bourriquet
Hello World, I'm new !
 
Messages: 5
Inscription: 29 Sep 2010, 23:30


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 8 invités

cron