Bonjour,
J'ai enfin réussi à débugger mon programme après 3 heures d'outils Debug de Code::Blocks, mais ma page n'affiche rien (écran noir seulement). Pourtant, dans un code à peu près similaire, j'ai fait le même ordre de fonction (glClear, glMatrixMode ... seules les structures changent, or il n'y a aucun problème avec les structures car j'ai vérifié leur valeur à l'aide d'un fprintf et les valeurs voulus correspondent bien avec les valeurs effectives).
La fonction s'occupant réellement de l'affichage est la suivante :
La liste contient deux maillons, le premier de type POINT et le second de type SEGMENT (#define)void affichage(ListeObjets *liste)
{
Maillon *courant = liste->premier;//Création d'un maillon courant qui commence au début de la liste
//Chargement de l'intérieur de la page apr OpenGl
glMatrixMode(GL_PROJECTION);//matrice dans laquelle nous définissons le mode de projection (orthogonale, perspective)
glLoadIdentity();//Chargement d'une page vide
gluOrtho2D(0, LARGEUR_ECRAN, 0, HAUTEUR_ECRAN);//Chargement du repère orthonormé LARGEUR_ECRAN = 640 et HAUTEUR_ECRAN = 480
glMatrixMode(GL_MODELVIEW);//Permet d'afficher des objets
glClear(GL_COLOR_BUFFER_BIT);//On efface l'écran
while( courant != NULL)
{
switch((courant->objetGraphique).type)
{
case POINT:
glColor3ub((courant->objetGraphique).point.rouge, (courant->objetGraphique).point.vert, (courant->objetGraphique).point.bleu);
glBegin(GL_POINTS);
glVertex2d((courant->objetGraphique).point.x, (courant->objetGraphique).point.y);
glEnd();
break;
case SEGMENT:
glColor3ub((courant->objetGraphique).segment.rouge, (courant->objetGraphique).segment.vert, (courant->objetGraphique).segment.bleu);
glBegin(GL_LINE);
glVertex2d((courant->objetGraphique).segment.depart.x, (courant->objetGraphique).segment.depart.y);
glVertex2d((courant->objetGraphique).segment.arrivee.x, (courant->objetGraphique).segment.arrivee.y);
glEnd();
break;
default: printf("Affichage indéfini !!");
}
courant = courant->suivant;
}
glFlush();
SDL_GL_SwapBuffers();
}
typedef struct str_Point
{
short int rouge;
short int vert;
short int bleu;
double x;//Abscisse
double y;//Ordonnée
}
Point;
typedef struct str_Segment
{
short int rouge;
short int vert;
short int bleu;
Point depart;
Point arrivee;
}
Segment;
typedef union union_objetGraphique
{
int type;
Point point;
Segment segment;
}
ObjetGraphique;
typedef struct Maillon Maillon; //Maillon composant la liste (un maillon = un type (objet) graphique
struct Maillon
{
ObjetGraphique objetGraphique;
Maillon* suivant;
};
typedef struct str_listeObjets //Liste d'objet graphique
{
Maillon* premier;//Premier objet créer
Maillon* dernier;//Dernier objet de la liste
}
ListeObjets;
Je précise que grâce à l'outils de Debug de C::B (instructions par instructions) j'ai pu vérifier que le programme effectuais bien les 2 cas de mon switch.
Si vous avez besoin de plus d'information (ou même le code entier, qui fait 6 modules), n'hésitez pas.
Je vous remercie à l'avance pour vos réponses.
Partager