Comment initialiser OpenGL (pas OGRE) sur MacOSX ?

Programmation d'applications complexes
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Comment initialiser OpenGL (pas OGRE) sur MacOSX ?

Message par Niffo »

Bonjour,

J'ai une application PB qui fonctionne sous Windows et Linux et qui fait appel à OpenGL en natif.
Savez-vous comment initialiser et utiliser l'API d'OpenGL (et non pas OGRE) sous MacOSX ? (x86)

Merci.
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Message par Niffo »

Ok, voici donc le minimum pour initialiser et utiliser OpenGL avec Glut sur MacOS

Code : Tout sélectionner

EnableExplicit

ImportC "/System/Library/Frameworks/GLUT.framework/GLUT"
   glutInit(*argcp.i, *argv.b)
   glutInitDisplayMode(mode.i)
   glutInitWindowPosition(x.i, y.i)
   glutInitWindowSize(width.i, height.i)
   glutMainLoop()
   glutCreateWindow(title.s)
   glutFullScreen()
   glutDisplayFunc(*Proc)
   glutIdleFunc(*Proc)
   glutSwapBuffers() 
EndImport

ImportC "/System/Library/Frameworks/OpenGL.framework/OpenGL"
   glClear(mask.l)
   glClearColor(red.f, green.f, blue.f, alpha.f)
EndImport

;IncludeFile "gl.pbi"
#GL_COLOR_BUFFER_BIT               = $00004000
#GL_DEPTH_BUFFER_BIT               = $00000100

;IncludeFile "glut.pbi"
#GLUT_RGB                           = $0000
#GLUT_DEPTH                         = $0010
#GLUT_DOUBLE                        = $0002

ProcedureC draw()
   glClearColor(1, 0, 0, 0)
   glClear(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
   glutSwapBuffers()
EndProcedure

Define a = 0

glutInit(@a, 0)
glutInitWindowSize(256, 256);
glutInitWindowPosition(0, 0);
glutInitDisplayMode(#GLUT_RGB | #GLUT_DEPTH | #GLUT_DOUBLE);
glutCreateWindow("Title")
glutDisplayFunc(@draw())
;glutIdleFunc(@draw())
;glutKeyboardFunc(@key())
;glutReshapeFunc(@reshape())

glutMainLoop()
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

A priori, il n'y a pas foule d'utilisateur du léopard (si ça marche aussi sous cette version. J'ai appris que son successeur était en route). Ce qui est un tort, vu sa patate...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

A part Niffo & Oliv, je ne vois pas grand utilisateur :)
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonsoir à tous.

Moi j'ai un iMac 2,4 Ghz Intel Core 2 Duo avec 2 Go de Mémoire et carte graphique Ati Radeon HD2600, mais le seul problème c'est que je n'ai jamais réussi a faire tourner PureBasic dessus.

J'ai tout essayé mais à chaque fois j'ai des problèmes.Par exemple, StartDrawing ne fonctionne pas avec ce code tout simple. J'ai marqué le message d'erreur qu'il me retourne sur la ligne de StartDrawing.

Code : Tout sélectionner

Width=200
  Height=150 
  If OpenWindow(0, 0, 0, Width, Height, "Circles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If StartDrawing(WindowOutput(0)); <-----The spécified output is null (0 value)
      x = Width/2
      y = Height/2
      For Radius = Height/2 To 10 Step -10
        Circle(x, y, radius ,RGB(Random(255),Random(255),Random(255)))
      Next
      StopDrawing() ; This is required when drawing operations are done. Never forget it!
    EndIf
    
    Repeat : Event = WaitWindowEvent() : Until Event = #PB_Event_CloseWindow
  EndIf
:(
Avant la dernière version cette commande scratchait carrément le système mais maintenant j'obtient bien une fenêtre mais vide.
Et si je crée un exécutable avec ce programme ou un autre, lorsque je le lance, j'ai une fenêtre du terminal qui s'ouvre en même temps que la fenêtre du programme. Si je ferme le terminal le programme se ferme aussi.
J'ai regardé le forum Anglais, mais personne ne semble avoir ce genre de problème et comme je ne parle pas un mot d'anglais... :(
Alors pour l'instant je programme sur Mac avec RealBasic même si ce n'est pas le pied.
Alors si Niffo ou Oliv peuvent me dire comment ils l'ont installé je suis preneur... :D
Moi, j'ai juste copié le dossier PureBasic dans le dossier application comme il est spécifié dans le Read me.
Merci d'avance. :D
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Message par Niffo »

Je crois que WindowOutput ne fonctionne en effet pas sur MacOSx86, mais tu devrais essayer de dessiner dans un contrôle image, je crois que ImageOutput fonctionne lui.

[Edit]
Je confirme, ça marche :

Code : Tout sélectionner

Width=200
Height=150
If OpenWindow(0, 0, 0, Width, Height, "Circles", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   ImageGadget(0, 0, 0, width, height, 0)
   CreateImage(0, width, height)
   If StartDrawing(ImageOutput(0)); <-----The spécified output is null (0 value) 
      x = Width/2
      y = Height/2
      For Radius = Height/2 To 10 Step -10 
         Circle(x, y, radius ,RGB(Random(255),Random(255),Random(255))) 
      Next 
      StopDrawing() ; This is required when drawing operations are done. Never forget it! 
      SetGadgetState(0, ImageID(0))
   EndIf 

   Repeat : Event = WaitWindowEvent() : Until Event = #PB_Event_CloseWindow 
EndIf
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonjour Niffo,

Merci pour ta réponse, mais malheureusement ça ne marche pas chez moi, cette fois-ci j'ai :

Code : Tout sélectionner

   ImageGadget(0, 0, 0, width, height, 0) ;<--- Ligne 4: syntax error
d'ailleurs à ce sujet dans de nombreux programmes j'ai des "syntax error" sur beaucoup de lignes... :(

Mais tu ne m'as pas dit comment tu avais installé PureBasic et si quand tu compiles un programme si ça marche sans problèmes ?

Merci d'avance pour tes réponses.

A+
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Message par Niffo »

Good07 a écrit :Bonjour Niffo,
Merci pour ta réponse, mais malheureusement ça ne marche pas chez moi, cette fois-ci j'ai :

Code : Tout sélectionner

   ImageGadget(0, 0, 0, width, height, 0) ;<--- Ligne 4: syntax error
Supprime les espaces ou les tabulations en début de ligne
Mais tu ne m'as pas dit comment tu avais installé PureBasic ...
Comme toi
et si quand tu compiles un programme si ça marche sans problèmes ?
Oui, sauf si j'utilise les fonctions qui posent pb avec MacOS, comme par exemple WindowOutput ;-)
Cela dit, je viens de compiler un programme de 8000 lignes (utilisant OpenGL, pour en revenir au sujet ;-) ) provenant de Windows sans aucun problème.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Niffo à écrit:
Supprime les espaces ou les tabulations en début de ligne
Formidable :D :D :D :D Et en plus ça marche !

Alors ça c'est un peu fort. 8O

J'aurai jamais pensé à un détail comme celui-ci...

Bon, merci beaucoup pour cette avancée mais par contre pour la compilation c'est toujours pas le pied. J'ai toujours cette fenêtre du terminal qui s'ouvre et qui m'empêche d'utiliser le programme car c'est elle qui à toujours le focus. :(
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Message par Niffo »

Bon, merci beaucoup pour cette avancée mais par contre pour la compilation c'est toujours pas le pied. J'ai toujours cette fenêtre du terminal qui s'ouvre et qui m'empêche d'utiliser le programme car c'est elle qui à toujours le focus. :(
Lorsque tu genères un EXE (je suppose que c'est dans ce cas que tu as le "problème" dont tu parles), il faut ajouter ".app" au nom de ton executable si tu veux qu'il se comporte comme une application mac.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Merci Beaucoup Niffo :D

Comme je le dis souvent "Il vaut mieux un qui sait que trois qui cherchent !"

Tu as raison sur toute la ligne. Le fait d'ajouter l'extension ".app" fait que le programme fonctionne normalement. A ce sujet je me demande pourquoi le compilateur ne le rajoute pas automatiquement. Il rajoute bien ".exe" aux exécutables de Windows.
Enfin là tu me sauves la mise et désolé d'avoir pollué ton topic avec mes problèmes. :?

Par contre pour en revenir a ton topic, j'ai essayé de tester ton programme avec mon PureBasic tout neuf qui fonctionne :wink: et j'ai ce message:
ligne 22: Constant not found: #GL_COLOR_BUFFER_BIT
Si je commente la ligne 22, j'ai le même message ligne 23 et ainsi de suite. En fait avec toutes les constantes...
Niffo
Messages : 108
Inscription : dim. 29/août/2004 15:51

Message par Niffo »

A ce sujet je me demande pourquoi le compilateur ne le rajoute pas automatiquement.
Parce que ce n'est pas forcément ce que tu veux faire lorsque tu compiles. Le fait d'ajouter .app n'ajoute pas une extension à l'executable :-) ... ça crée une application au sens mac, c'est à dire un dossier (essaye click droit => afficher le contenu du paquet)
Par contre pour en revenir a ton topic, j'ai essayé de tester ton programme avec mon PureBasic tout neuf qui fonctionne :wink: et j'ai ce message:
ligne 22: Constant not found: #GL_COLOR_BUFFER_BIT
Sans doute encore un pb de copié/collé. Retire encore les espaces pour voir. Je n'ai pas cherché pourquoi, mais l'IDE version mac a l'air allergique aux copiés/collés à partir du site.

Sinon, tu risques de ne pas être très impressionné par mon exemple, ça ouvre juste une fenêtre rouge :-) ... mais pas n'importe quel rouge : du rouge OpenGL ! ;-)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Bonjour,
Il doit y avoir un soucis en rapport avec les caractères fin de lignes des navigateurs web. Car si on fait un copier/coller venant d'une machine virtuelle Windows ça fonctionne...
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

Bonjour à tous,

Oliv a écrit:
Il doit y avoir un soucis en rapport avec les caractères fin de lignes des navigateurs web. Car si on fait un copier/coller venant d'une machine virtuelle Windows ça fonctionne...
En fait, il y a un souci tout court avec l'éditeur car je disais plus haut à Niffo que j'avais des soucis avec les constantes de son programme.
Et bien en fait :

Code : Tout sélectionner

#GL_COLOR_BUFFER_BIT               = $00004000 
#GL_DEPTH_BUFFER_BIT               = $00000100
écrit comme cela l'éditeur râle et me sort "constante not found"
Par contre si j'écrit :

Code : Tout sélectionner

 
#GL_COLOR_BUFFER_BIT= $00004000 
#GL_DEPTH_BUFFER_BIT= $00000100 
Ca marche Nickel Chrome... :D

Bizarre... Vous avez dit bizarre ?

Enfin, l'essentiel c'est de le savoir mais c'est pénible pour le copier coller, il faut reprendre tous les listings pour que ça fonctionne. De plus au bout de trois ou quatre copier coller a partir du site de PureBasic, ça me plante carrément l'éditeur. Les commandes par les icônes ne fonctionnent plus et il faut se servir des commandes des menus pour que cela fonctionne. 8O
Je pense que Fred aura quelques retouche à faire avec l'éditeur. Il à corrigé quelques bugs mais apparemment il y en a d'autres.
Good07
Messages : 308
Inscription : ven. 23/avr./2004 18:08
Localisation : Hérault 34190 Laroque

Message par Good07 »

En fait je viens juste de trouver ce qui cloche. Et bien ce qui cloche c'est safari. Si je fait un copier coller a partir de Firefox je n'ai aucun problème. Je peux utiliser le listing tel quel sans retoucher quoi que ce soit. 8O
A vérifier chez vous mais chez moi c'est Nickel... :D
Répondre