Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SrCooper en 4 Septiembre 2013, 21:03 pm



Título: No se ejecuta el modo gráfico de una aplicación con SDL/GL
Publicado por: SrCooper en 4 Septiembre 2013, 21:03 pm
Buenas, acabo de instalar las librerias SDL/GL en xubuntu y (para testear las librerías) lo primero que hice fue crear una sencilla aplicación que muestra un fondo negro y se acaba cuando el usuario pulsa la tecla ESCAPE.

La compilación funciona perfectamente, y la ejecución desde Codeblocks también, el problema llega cuando tengo que ejecutar el ejecutable que se ha generado, simplemente no se muestra la ventana.

Es decir, no funciona el modo gráfico cuando ejecuto el programa. No se muy bien si tengo que instalar algo adicional o cual es el problema, aunque estoy casi 100% seguro de que este no está en el código.

Un saludo y gracias de antemano


Título: Re: No se ejecuta el modo gráfico de una aplicación con SDL/GL
Publicado por: Stereo en 4 Septiembre 2013, 22:35 pm
Asegúrate de que SDL_Init y SDL_SetVideoMode no retornan error y te digo mis  Compiler and Debugger Settings:

Linker settings>Other linker options:
-lmingw32 -lSDLmain -lSDL

Search Directories>Compiler:
C:\...\SDL\include

Search Directories>Linker:
C:\...\SDL\lib


Título: Re: No se ejecuta el modo gráfico de una aplicación con SDL/GL
Publicado por: SrCooper en 4 Septiembre 2013, 22:44 pm
Devuelve este error
Código:
cannot find -lmingw32

Ahora me he dado cuenta de que es un problema de código pues tampoco se ejecuta desde el Codeblocks.
Esta es la función que utilizo para inicializar, puede que algo este mal aquí:

Código
  1. bool init(int w, int h, std::string title)
  2. {
  3.    SDL_Init(SDL_INIT_EVERYTHING);
  4.  
  5.    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
  6.    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
  7.    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
  8.    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 32);
  9.    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
  10.    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  11.  
  12.    SDL_WM_SetCaption(title.c_str(), title.c_str());
  13.  
  14.    SDL_SetVideoMode(w, h, 32, SDL_OPENGL);
  15.  
  16.    glShadeModel(GL_SMOOTH);
  17.  
  18.    glClearColor(0,0,0,1);
  19.  
  20.    glViewport(0, 0, w, h);
  21.  
  22.    glMatrixMode(GL_PROJECTION);
  23.    glLoadIdentity();
  24.  
  25.    glDisable(GL_DEPTH_TEST);
  26.  
  27.    return true;
  28. }
Si no es eso no se me ocurre nada más, porque he probado a compilar los ejemplos de Codeblocks (que inicializan de otra manera) y no hay ningún problema.

Recuerda que estoy usando linux (lo digo porque alomejor la configuración del compilador tiene que ser distinta)

Un saludo y muchas gracias por todo  ;)


Título: Re: No se ejecuta el modo gráfico de una aplicación con SDL/GL
Publicado por: Stereo en 4 Septiembre 2013, 22:53 pm
Si, puede ser distinta, yo lo uso en windows y lo de -lmingw32 la verdad no tengo ni idea de que es.

Como te dije antes, mira qué retorna SDL_Init y SDL_SetVideoMode


Título: Re: No se ejecuta el modo gráfico de una aplicación con SDL/GL
Publicado por: SrCooper en 4 Septiembre 2013, 23:11 pm
Ya está solucionado. El problema estaba en la función init() en la parte en la que se asigna los tamaños de memoria. Me faltaba un parametro, además uno de ellos estaba mal. Es así:
Código
  1.    bool init(int w, int h, std::string title)
  2.    {
  3.       SDL_Init(SDL_INIT_EVERYTHING);
  4.  
  5.       SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
  6.       SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
  7.       SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
  8.       SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
  9.       SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
  10.       SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
  11.       SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  12.  
  13.       SDL_WM_SetCaption(title.c_str(), title.c_str());
  14.  
  15.       SDL_SetVideoMode(w, h, 32, SDL_OPENGL);
  16.  
  17.       glShadeModel(GL_SMOOTH);
  18.  
  19.       glClearColor(0,0,0,1);
  20.  
  21.       glViewport(0, 0, w, h);
  22.  
  23.       glMatrixMode(GL_PROJECTION);
  24.       glLoadIdentity();
  25.  
  26.       glDisable(GL_DEPTH_TEST);
  27.  
  28.       return true;
  29.    }

Un saludo y muchas gracias por la ayuda  ;)