No se ejecuta el modo gráfico de una aplicación con SDL/GL

Iniciado por SrCooper, 4 Septiembre 2013, 21:03 PM

0 Miembros y 1 Visitante están viendo este tema.

SrCooper

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

Stereo

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

SrCooper

Devuelve este error

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 (cpp) [Seleccionar]

bool init(int w, int h, std::string title)
{
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
    SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 32);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    SDL_WM_SetCaption(title.c_str(), title.c_str());

    SDL_SetVideoMode(w, h, 32, SDL_OPENGL);

    glShadeModel(GL_SMOOTH);

    glClearColor(0,0,0,1);

    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glDisable(GL_DEPTH_TEST);

    return true;
}

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  ;)

Stereo

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

SrCooper

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 (cpp) [Seleccionar]

    bool init(int w, int h, std::string title)
    {
       SDL_Init(SDL_INIT_EVERYTHING);
     
       SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
       SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
       SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
       SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
       SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
       SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
       SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
     
       SDL_WM_SetCaption(title.c_str(), title.c_str());
     
       SDL_SetVideoMode(w, h, 32, SDL_OPENGL);
     
       glShadeModel(GL_SMOOTH);
     
       glClearColor(0,0,0,1);
     
       glViewport(0, 0, w, h);
     
       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
     
       glDisable(GL_DEPTH_TEST);
     
       return true;
    }


Un saludo y muchas gracias por la ayuda  ;)