Initialisation de glut
Tout d'abord, il faudra initialiser glut:
void glutInit(int *argc,char **argv);
Avec argc et argv les options de la ligne de commande qui seront passées à la fonction main() au lancement de notre programme. Il faudrait donc simplement les renvoyer à glutInit() !
Ces paramètres sont en fait ceux qu'un utilisateur peut envoyer sous XWindow pour indiquer sur quel écran afficher la fenêtre, ...
-display DISPLAY Spécifie l'adresse du serveur X auquel se connecter.
Si ce n'est spécifié, la variable d'environnement est utilisée.
-geometry WxH+X+Y Détermine la position de la fenêtre sur l'écran.
Le paramètre de geometry doit être formaté selon la spécification
standard de X.
-iconic Indique que la fenêtre est créée dans l'état
iconisé.
-indirect Force l'utilisation du contexte indirect de rendu réaliste
d'OpenGL.
-direct Force l'utilisation du contexte direct de rendu réaliste d'OpenGL.
Une
erreur fatale est rencontrée si le système ne supporte pas ce
mode. Par
défaut, le mode direct est utilisé, sinon c'est le mode indirect.
-gldebug Après le traitement des fonctions de rappel ou des événements,
vérifier
s'il y a des erreurs d'OpenGL en appelant glGetError. S'il y a une erreur,
imprimer un avertissement obtenu par la fonction gluErrorString.
-sync Utiliser le protocole X synchronisé. Plus facile pour retracer
les erreurs
potentielles du protocole X.
Sous Microsoft Windows, je n'en voit pas bien l'intérêt...
Exemple avec main
Voici un exemple:
[...les includes...]
int main(int argc, char* argv[])
{
glutInit (&argc, argv);
printf ("Fin du programme\n");
return 0;
}
Evidemment, il ne se passera pas grand chose à l'écran !
Sous Windows, si vous
choisissez un projet de type Win32 console application, celui-ci vous permettra
d'avoir une console en plus de la fenêtre que vous allez ouvrir via glut.
Ainsi, vous pourrez tracer votre code via printf par exemple.
Exemple avec WinMain
Si vous choisissez un projet de type Win32 application, et bien vous n'aurez pas la console et la signature sera alors WinMain.
Dans cette solution, je vais recréer un argc et un argv à "vide" puisque nous n'aurons pas ces informations directement dans WinMain...Il est cependant possible de les récupérer si jamais vous aviez besoin de passer quelque chose à GlutInit (mais alors quoi ????). Voir le chapitre sur GetCommandLine et CommandLineToArgvW.
#include "gl\glut.h"
#include <windows.h>
#include <stdio.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int argcv = 1; // Nombre de paramètres. Minimum à 1 qui correspond au paramètre indiquant le nom de la commande
char *argvv[2]; // Pointeur sur des char contenant les paramètres
char commande [] = "GLUT"; // Le premier est la commande (nom du programme). Les suivants devraient être des arguments, mais ici on s'en fiche...// Construction d'un pseudo tableau de paramètres
argvv[0] = &commande[0]; // Commande, il est obligatoire ce paramètre
argvv[1] = 0; // Fin de la liste des paramètres
// Et on passe le tout à glut init
glutInit (&argcv, argvv);...suite du code...
return 0;
}