Page 1 sur 3

Comment initialiser OpenGL (pas OGRE) sur MacOSX ?

Publié : lun. 02/févr./2009 18:34
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.

Publié : mer. 25/févr./2009 19:34
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()

Publié : jeu. 26/févr./2009 16:01
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...

Publié : jeu. 26/févr./2009 16:13
par Progi1984
A part Niffo & Oliv, je ne vois pas grand utilisateur :)

Publié : jeu. 26/févr./2009 22:28
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

Publié : jeu. 26/févr./2009 22:58
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

Publié : ven. 27/févr./2009 10:13
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+

Publié : ven. 27/févr./2009 10:22
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.

Publié : ven. 27/févr./2009 17:19
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. :(

Publié : ven. 27/févr./2009 18:58
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.

Publié : ven. 27/févr./2009 20:12
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...

Publié : ven. 27/févr./2009 20:35
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 ! ;-)

Publié : sam. 28/févr./2009 9:19
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...

Publié : sam. 28/févr./2009 9:55
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.

Publié : sam. 28/févr./2009 10:01
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