IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Compilation avec gcc


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut Compilation avec gcc
    Salut, en fait j'auais un petit prob, voyez-vous je viens de ma lancer dans la compilation OpenGL, et j'essaye de faire quelques petites programmes en 3D, des trucs pas très complexes.
    Sachant que je compile avec gcc sous Windows, en faisant un MakeFile.
    Mais le truc c'est que quand je lance mes programmes sous console, tout vas bien, mais si j'allume directement le fichier.exe et bien j'ai un écran bleu de la mort qui apparait, et je ne peu pas envoyer mes mini-programme pour que d'autres puissent les regarder, car ils ont tous ce prob...
    Est-ce que vous savez comment régler ça?
    Merci d'avance.

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    regarde du coté d'un ide ou de toutes autres solutions permettant de faire une exécution pas à pas, pour voir si il n'y aurait un pas un appel qui fait tout planter.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    Bah en fait je n'ai pas d'IDE, je code sous notePad++ et je compile avec un MakeFile, alors je vois pas où ça peut bugger de ce côté là...
    Sinon, pour le reste le code n'a rien de sorcier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #include <iostream>
    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	SDL_Init(SDL_INIT_VIDEO);
    	SDL_Surface *ecran = NULL;
    	ecran = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);
    	glClear(GL_COLOR_BUFFER_BIT);
     
    	glBegin(GL_TRIANGLES);
    		glColor3ub(255, 0, 0); glVertex2d(-0.75, -0.75);
    		glColor3ub(0, 255, 0); glVertex2d(0, 0.75);
    		glColor3ub(0, 0, 255); glVertex2d(0.75, -0.75);
    	glEnd();
     
    	glFlush();
    	SDL_GL_SwapBuffers();
     
    	bool continuer = true;
    	SDL_Event event;
    	while(continuer)
    	{
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    			case SDL_QUIT:
    				continuer=false;
    		}
    	}
    	SDL_Quit();
    	return EXIT_SUCCESS;
    }
    Franchement il n'a aucune raison de faire un écran bleu...

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Si cela est votre programme ... il me semble faux.
    D'abord; habituellement, je passe un SDL_SWSURFACE comme indicateurs à SDL_SetVideoMode.
    Après il faut vérifié si la surface retournée est non nulle.

    Je vous conseille de suivre ce tuto: http://tbayart.developpez.com/articl...fenetrage/sdl/
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    En fait cette fois ci j'ai suivis ce tuto, et maintenant, j'ai deux problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <iostream>
    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
     
    using namespace std;
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	if( SDL_Init(SDL_INIT_VIDEO) < 0)
    	{
    		cerr << "Echec SDL_Init : " << SDL_GetError() << endl;
    		return (EXIT_FAILURE);
    	}
    	atexit(SDL_Quit);
    	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    	SDL_Surface *ecran = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);
    	if(ecran==NULL)
    	{
    		cerr << "Echec lors de la création de fenêtre:" << SDL_GetError() << endl;
    		return (EXIT_FAILURE);
    	}
    	int valeurBuffer;
    	if(SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &valeurBuffer)<1)
    	{
    		cerr << "Echec de recuperation du parametre SDL_GL_DOUBLEBUFFER : " << SDL_GetError() << endl;
    		return (EXIT_FAILURE);
    	}
    	if(valeurBuffer!=1)
    	{
    		cerr << "Erreur : SDL_GL_DOUBLEBUFFER inactif" << endl;
    		return (EXIT_FAILURE);
    	}
     
    	bool continuer = true;
    	SDL_Event event;
    	while(continuer)
    	{
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    			case SDL_QUIT:
    				continuer=false;
    		}
    		glClear(GL_COLOR_BUFFER_BIT);
     
    		glBegin(GL_TRIANGLES);
    			glColor3ub(255, 0, 0); glVertex2d(-0.75, -0.75);
    			glColor3ub(0, 255, 0); glVertex2d(0, 0.75);
    			glColor3ub(0, 0, 255); glVertex2d(0.75, -0.75);
    		glEnd();
    		glFlush();
    		SDL_GL_SwapBuffers();
    	}
    	return EXIT_SUCCESS;
    }
    Apparemment ce teste me répond que ça marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if(SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &valeurBuffer)<1)
    	{
    		cerr << "Echec de recuperation du parametre SDL_GL_DOUBLEBUFFER : " << SDL_GetError() << endl;
    		return (EXIT_FAILURE);
    	}
    L'écran s'affiche, puis s'éteint aussitôt et j'ai le fichier stderr d'erreur qui m'affiche:
    Echec de recuperation du parametre SDL_GL_DOUBLEBUFFER :
    Mais je j'ai aucune autre indication pour ce qui est de l'erreur.

    Sinon, en fait à aucun moment il me parle de SDL_SWSURFACE, je crois que ça ne se place que quand on fait de la SDL pure, mais je suis pas sûr du tout...

    Sinon, si je saute ce test, et bien j'ai toujours l'écran bleu...

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    J'ai fait un test chez moi ... le GL_DOUBLEBUFFER est bien à 1.
    Donc j'imagine que le test est faux ...

    D'après cette doc ... oui le test ext complètement:
    http://www.libsdl.org/docs/html/sdlglgetattribute.html

    Sinon, une fois le test corrigé, le programme fonctionne
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    Ah, je vois où je me suis gouré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	if(SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &valeurBuffer)<1)
    	{
    		cerr << "Echec de recuperation du parametre SDL_GL_DOUBLEBUFFER : " << SDL_GetError() << endl;
    		return (EXIT_FAILURE);
    	}
    C'est pas 1 mais 0, car ils disent

    Return Value

    Returns 0 on success, or -1 on an error.
    Or, les deux valeurs sont nécessairement inférieurs à 1, je me suis légèrement emmêlé les pinceaux...

    Du coup le programme marche, mais j'ai toujours ce problème d'écran bleu, je vois pas ce qui bug...

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Sous mon linux, cela fonctionne.
    J'imagine que votre DLL a un problème ... ou votre système pour compiler ...

    Je vous conseille de réinstaller la SDL, et de mettre votre pilote OpenGL (pilote graphique).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    C'est à dire que je n'ai pas installé SDL, je compile sous Windows, et j'utilise directement les sources téléchargées sur le site...
    Sinon, pour ma carte graphique, j'ai déjà le dernier pilote en date...
    Le truc c'est que quand je lance depuis la console, tout fonctionne, mais si j'exécute directement le fichier .exe ça bug...
    Et le DLL, et la compilation, je vois pas comment modifier ça...


    EDIT:
    En fait je crois que le problème ne viens bel et bien pas de mon code, car si je lance le programme depuis MS-Dos, ça marche, c'est seulement si je le lance depuis l'explorer.
    Et de plus j'ai légèrement modifié mon code afin qu'à chaque lignes intéressantes, il y ait un message dans un fichier de sortie qui apparaisse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
     
    #define arrivee() fprintf(sortie, "arrivée à la ligne %i\n", __LINE__)
     
    int main(int argc, char *argv[])
    {
    	int continuer = 1;
    	SDL_Event event;
    	FILE *sortie = fopen ("Sortie.txt", "w+");
    	if (sortie == NULL)
    	{
    		printf ("Erreur : base de donnees introuvable...\n");
    		return EXIT_FAILURE;
    	}
    	arrivee();
    	if( SDL_Init(SDL_INIT_VIDEO) < 0)
    	{
    		fprintf(sortie, "Echec SDL_Init à la ligne %i: %i\n", __LINE__, *SDL_GetError());
    		return (EXIT_FAILURE);
    	}
    	arrivee();
    	SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    	SDL_Surface *ecran = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);
    	if(ecran==NULL)
    	{
    		fprintf(sortie, "Echec lors de la création de fenêtre à la ligne %i: %i\n", __LINE__, *SDL_GetError());
    		return (EXIT_FAILURE);
    	}
    	arrivee();
    	int valeurBuffer;
    	if(SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &valeurBuffer)<0)
    	{
    		fprintf(sortie, "Echec de recuperation du parametre SDL_GL_DOUBLEBUFFER à la ligne %i: %i\n", __LINE__, *SDL_GetError());
    		return (EXIT_FAILURE);
    	}
    	arrivee();
    	if(valeurBuffer!=1)
    	{
    		fprintf(sortie, "Erreur : SDL_GL_DOUBLEBUFFER inactif à la ligne %i\n", __LINE__);
    		return (EXIT_FAILURE);
    	}
    	arrivee();
    	while(continuer)
    	{
    		SDL_WaitEvent(&event);
    		switch(event.type)
    		{
    			case SDL_QUIT:
    				continuer = 0;
    	arrivee();
    	fclose(sortie);
    	SDL_Quit();
    				exit(EXIT_SUCCESS);
    			break;
    			case SDL_KEYDOWN:
    				switch(event.key.keysym.sym)
    				{
    					case SDLK_ESCAPE:
    						continuer = 0;
    	arrivee();
    	fclose(sortie);
    	SDL_Quit();
    						exit(EXIT_SUCCESS);
    					break;
    					default:
    					break;
    				}
    			break;
    		}
    		glClear(GL_COLOR_BUFFER_BIT);
    		glBegin(GL_TRIANGLES);
    			glColor3ub(255, 0, 0); glVertex2d(-0.75, -0.75);
    			glColor3ub(0, 255, 0); glVertex2d(0, 0.75);
    			glColor3ub(0, 0, 255); glVertex2d(0.75, -0.75);
    		glEnd();
    		glFlush();
    		SDL_GL_SwapBuffers();
    	}
    	arrivee();
    	fclose(sortie);
    	SDL_Quit();
    	return EXIT_SUCCESS;
    }
    (Vous l'avez peut-être pas remarqué, mais la nouvelle compilation est en C, et non plus en C++)

    Et là du coup j'aurais dus voir un fichier sortie qui me permettait de voir à quelle ligne le fichier s'arrêtait.
    Mais je n'ai rien, même pas le fichier de sortie vide, ni les lignes du début...
    Est-ce qu'il y a déjà eut ce genre d'erreur?
    Car j'aimerais vraiment pouvoir compiler et envoyer mes programmes, si je peu pas faire ça, ça me sert à rien de continuer...
    Aidez-moi SVP...

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    Malheureusement, lors d'un bug de ce genre (erreur de segmentation, ou écran bleu) on ne peut pas écrire dans un fichier (du moins, le fichier n'est pas écran, à cause d'une histoire de buffer).
    Peut être (mais je n'ai jamais essayé) la technique est:
    - OUvrir le fichier
    - Ecrire
    - Fermer
    Et ce à chaque fois que l'on veut mettre un truc dans le fichier.

    Pour votre bug, avec qui compilez vous? Vous êtes windows, et pourtant vous utilisez Notepad et et un Makefile O_o
    Il va falloir nous expliquer comment vous faites ... qu'avez vous utiliser ... quelles .DLL / .a / .lib vous utilisez, ou avez ou eu la SDL ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut
    Alors je suis sous Windows Vista. Et je compile avec Mingw qui entre-autre contient gcc, il existe une version téléchargeable et installable pour windows, et on peut faire des MakeFile tout comme pour Linux, à condition de rentrer le programme dans les variable d'environnement, et ainsi de pouvoir l'utiliser à tout moment dans la console de Windows, mais ça c'est sûr que ça marche.
    Sinon, pour la SDL, je l'ai téléchargée sur le site officiel les source code:
    http://www.libsdl.org/download-1.2.php
    Et je l'ai linker dans le MakeFile
    Et pour les DLL, j'utilise celle de la SDL, celle de l'openGL étant déjà intégrée à Windows.

    Voilà mon MakeFile, si ça peut aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    OBJECTS = main.o
     
    install: all clean
     
    all: $(OBJECTS)
    	gcc -Wall -o main $^ -lmingw32 -lopengl32 -lglu32 -lSDL -lSDLmain -lSDL.dll -LC:/SDL/lib
     
    main.o: main.c
    	gcc -Wall -o $@ -c $< -IC:/SDL/include
     
    clean:
    	del *.o *~

  12. #12
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 150
    Billets dans le blog
    150
    Par défaut
    J'image que c'est cette version là: http://www.libsdl.org/release/SDL-de...mingw32.tar.gz précisément que vous avez choisi.

    Je dois dire que je n'ai plus aucune idée en tête ... à part que vous devriez réinstaller la chaine de compilation (et pourquoi ne pas essayer Code::Blocks)

    Sinon ... si rien ne va ... tentez avec un Visual Studio Express .... après je serai obligé de dire que c'est ultra étrange ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/04/2006, 19h02
  2. [débutant]compiler avec gcc sous linux
    Par Ickou dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/03/2006, 17h27
  3. compilation avec gcc: erreur inhabituelle
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 12/10/2005, 17h13
  4. Problème de compilation avec gcc
    Par Niktou dans le forum Linux
    Réponses: 9
    Dernier message: 27/09/2005, 15h18
  5. compilation avec gcc : erreurs bizard !!!
    Par CodeurNé dans le forum C
    Réponses: 2
    Dernier message: 23/09/2005, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo