Précédent   Forum des professionnels en informatique > Environnements de développement > Eclipse > Eclipse C & C++
Eclipse C & C++ Forum d'entraide Eclipse pour C et C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/01/2012, 19h25   #1
Invité de passage
 
simon
Étudiant
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : simon
Localisation : France, Seine Maritime (Haute Normandie)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 1
Points : 1
Par défaut Affichage SDL sous Eclipse avec Windows64

Bonjour,

J'ai un simple programme sous Eclipse qui compile très bien (après plusieurs heures d'efforts pour installer le compilateur c/c++, puis MinGW, freeglu...)

Mais au moment où je veux le lancer, aucune fenêtre. Ce programme marche sous Linux mais avec Eclipse, rien.

J'ai essayé différentes façons de commenter et il semble que l’exécution se bloque au moment où se réalise une instruction SDL quelconque.

Un simple printf passe, mais si j'ai une fonction avant (même non utilisée) qui fait un SDL_GL_SwapBuffers(); par exemple, eh bien rien du tout, même le printf dans le main ne passe plus, l’exécution se bloque totalement.

Voici le code, c'est censé dessiner un pauvre plan rouge sur une fenêtre.
Code :
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <stdlib.h>
#include <stdio.h>
 
#include <SDL/SDL.h>
#include <GL/glu.h>
#include <GL/gl.h>
 
/**
 * Initialisation de la SDL, création du contexte OpenGL et ouverture de la fenetre.
 */
void init_SDL() {
  SDL_Init(SDL_INIT_VIDEO); //BLOQUE ICI!!!!
 
  if (SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1) == -1) {
    fprintf(stderr, "Impossible d'activer le double buffer\n");
    SDL_Quit();
    exit(EXIT_FAILURE);
  }
 
  SDL_WM_SetCaption("SDL B-A-BA",NULL);
 
  if (SDL_SetVideoMode(640, 640, 32, SDL_OPENGL) == NULL) {
    fprintf(stderr, "Impossible de passer en mode OpenGL : %s\n", SDL_GetError());
    SDL_Quit();
    exit(EXIT_FAILURE);
  }
}
 
/**
 * Initialisation des états du contexte OpenGL.
 */
void init_GL(void) {
    glClearColor(1., 1., 1., 0.);
}
 
/**
 * Affichage de la scène OpenGL.
 */
void display() {
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
  // On dessine un carré rouge dans le plan Oxy
  glColor3f(1.0, 0.0, 0.0);
  glBegin(GL_QUADS);
  glVertex3f(-.2, -.2, 0.);
  glVertex3f(.2, -.2, 0.);
  glVertex3f(.2, .2, 0.);
  glVertex3f(-.2, .2, 0.);
  glEnd();
 
  SDL_GL_SwapBuffers();
 
  GLenum erreur;
  if ((erreur = glGetError()) != GL_NO_ERROR) {
    fprintf(stderr, "Erreur OpenGL dans display : %s\n", gluErrorString(erreur));
  }
 
}
 
/**
 * Gestion du clavier.
 * @param event l'évènement SDL ayant déclenché l'appel à la fonction
 * (doit etre de type SDL_KEYDOWN).
 */
int keyboard(SDL_Event * event) {
  if (event->type == SDL_KEYDOWN) {
    switch(event->key.keysym.sym) {
    case SDLK_ESCAPE:
      return 0;
    default:
      break;
    }
  }
 
  return 1;
}
 
int WinMain(int argc, char *argv[]) {
  printf("toto");
  init_SDL();
  init_GL();
 
  int continuer = 1;
  SDL_Event event;
 
  // Boucle traitant les évènements de la fenetre
  while (continuer) {
    // On attend le prochain évènement
    SDL_WaitEvent(&event);
    // On traite l'évènement
    switch (event.type) {
    case SDL_QUIT:
      // On a fermé la fenetre
      continuer = 0;
      break;
    case SDL_KEYDOWN:
      // On a appuyé sur une touche
      continuer = keyboard(&event);
      break;
    }
    display();
  }
 
  // C'est fini : on libère les ressources proprement
  SDL_Quit();
 
  return EXIT_SUCCESS;
}
Quelqu'un aurait-il une idée de pourquoi l’exécution se bloque au passage des instructions SDL, alors que la compilation passe ?

Merci d'avance pour votre aide.
Cemen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 14h06   #2
Membre du Club
 
Inscription : novembre 2010
Messages : 59
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 59
Points : 60
Points : 60
Bonjour,

J'ai eu le même symptôme en essayant de lancer un "Helloworld SDL".

Pour résoudre ça, j'ai tenté de lancer le .exe en ligne de commande et là, j'ai vu une fenêtre m'expliquant que je n'avais pas SDL.dll...

Peut-tu essayer de prendre SDL.dll et le mettre dans C:\Windows\system ou C:\Windows\System32 ?
liouan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2012, 12h56   #3
Invité de passage
 
Inscription : mars 2012
Messages : 27
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 27
Points : 3
Points : 3
Si je ne me trompe pas, le sdl.dll doit être dans le dossier du projet, s'il est installé.

Il faut aussi que le SDL soit installé sur le PC.
JimDraw est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h16.


 
 
 
 
Partenaires

Hébergement Web