/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Empezando SDL

 
      Índice del Foro elrincondelc.com -> Gráficos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
mamntc02



Registrado: 30 Abr 2007
Mensajes: 277

MensajePublicado: 20/08/2007 5:03 am
Título: Empezando SDL

Hola,

Bueno, por fin voy empezando con SDL, y como no, me empiezan a salir dudas. El problema es q me estan saliendo demasiado pronto Sad

Primer código chorra:
Código:

#include <SDL/SDL.h>
#include <stdio.h>

int main(int argc, char** argv) {
   
    printf("Initializing SDL.\n");
   
    // Initialize defaults, Video and Audio
    if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) {
        printf("Could not initialize SDL: %s.\n", SDL_GetError());
        exit(-1);
    }
    printf("SDL initialized.\n");
    printf("Quiting SDL.\n");
   
    // Shutdown all subsystems
    SDL_Quit();
   
    printf("Quiting....\n");

    return 0;
}
Compilado con MinGW mediante la instrucción
Cita:
g++ -o prova.exe prova.cpp -lmingw32 -lSDLmain -lSDL

Compila perfectamente, no obstante al ejecutarlo ninguno de los printf se muestra. Por qué?

Si elimino toda referencia a SDL excepto el include, es decir:
Código:
#include <SDL/SDL.h>
#include <stdio.h>

int main(int argc, char** argv) {
   
    printf("Initializing SDL.\n");
   
    printf("Quiting....\n");

    return 0;
}
Tampoco imprime nada, siempre y cuando compile de la misma manera. En cambio, si compilo normalmente:
Cita:
g++ -o prova.exe prova.cpp

Me devuelve un error de linkage, q no puede encontrar WinMain16. Por lo q me parece SDL modifica el main, para q sea un WinMain. Puede ser? Q hace exactamente? Lo q me induce a otra pregunta: Se le debe decir al compilador q la aplicación es para windows (lo q sería en gcc el '-mwindows')?
Igualmente, q pasa con los printf q no imprime? Está redireccionando la salida estandard (stdout y/o stderr) hacia otro dispositivo? Hacia donde?

Se q son muchas preguntas a la vez, pero creo q son muy básicas para quien tenga conocimientos del SDL.

Gracias y saludos.
Volver arriba
_Martin_



Registrado: 03 Ago 2006
Mensajes: 165

MensajePublicado: 20/08/2007 6:57 am
Título:

Hola, el primer codigo funciona. El problema es que SDL crea una ventana y la funcion printf no puede escribir sobre ella como lo haria sobre la mitica ventana del DOS. No obstante, en algunos IDEs se puede apresiar que se abre una vantana auxiliar (ademas de la pantalla principal) en la que si se ve n los textos de printf.
Esta ventana NO es parte del programa y se abre para que el programador sepa lo que sucede.
Ahora bien, sin importar que IDE tengas, SDL redirecciona los textos de printf a un archivo auxiliar llamado stdout que se deberia encontrar en la carpeta donde se encuentra tu ejecutable. (Tambien crea otro archivo llamado stderr para informar sobre los errores, y si estos no existen, el archivo se borra automaticamente)

Ahora bien, como se puede "escribir" en una ventana SDL???. Para ello debes usar una libreria auxiliar (como por ejemplo SDL_TTF) Veras que tambien tiene sus limitaciones pero tambien hay solucion para ello.

Saludos
Volver arriba
mamntc02



Registrado: 30 Abr 2007
Mensajes: 277

MensajePublicado: 20/08/2007 10:43 pm
Título:

Muchas Gracias.

Al final, ayer ya me di cuenta de q me los grababa en ficheros stdout.txt y stderr.txt. También me di cuenta de como modifica la función main a WinMain, por lo q siempre se debe declarar main(). Si hubiera leído un poco más antes de preguntar... hehehehe.
También he leído q se puede definir NO_STDIO_REDIRECT para q no los envíe a un archivo, el problema es q el link donde estaba explicado no funcionaba. Alguien sabe si funciona algo así?

Lo q te refieres de la ventana, sí q es un terminal (ventana DOS), ya q compilo y ejecuto desde un terminal, no suelo usar ningún IDE.

Saludos y gracias de nuevo.
Volver arriba
Killrazor



Registrado: 24 Ene 2006
Mensajes: 1182
Ubicación: Barcelona

MensajePublicado: 21/08/2007 12:16 am
Título:

Recuerda que SDL no modifica el main sino lo substituye. Por eso es tan estricto en la manera en que lo escribes: tiene que ser
Código:
int main(int argc, char** argv)

Cita:

No obstante, en algunos IDEs se puede apresiar que se abre una vantana auxiliar (ademas de la pantalla principal) en la que si se ve n los textos de printf.

En realidad, lo que hacen algunos IDEs como Visual C++ es dejarte elegir si quieres lanzar el programa como windows o desde linea de comandos. Si lo lanzas desde linea de comandos primero abre una ventada de sistema y desde alli se lanza el programa. Es justamente aqui donde van las salidas estandar.
_________________
I wanna heal i wanna feel like I'm close to something real.
I wanna find something I've wanted all along
somewhere i belong
Volver arriba
      Índice del Foro elrincondelc.com -> Gráficos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com