Hola gente Estoy siguiendo el tutorial_SDL.pdf para SDL1 y tengo unas pequeñas dudas de como compilarlo para SDL2. Hasta ahora aprendí que debo poner : #include <SDL2/SDL.h> y para compilarlo por ejemplo : g++ -o test test1.c -lSDL2 , y compila a la perfección para algunos ejemplos. También con : g++ -o test test1.cpp `sdl2-config --cflags --libs` funciona a la perfección.
La idea es poder volver a escribir el tutorial este para sdl2 con licencia libre como estaba, con todos los ejemplos compilados funcioando en odt o en pdf, y pedirle permiso al autor, citarlo y poner otras cosas mas, todo en regla.
Aquí va el código fuente del hola mundo:
// Listado : Prueba.cpp
// Hola Mundo
// g++ -o test Prueba.cpp `sdl2-config --cflags --libs`
#include <stdio.h>
#include <SDL2/SDL.h>
int main() {
SDL_Surface *pantalla; //Definimos una superficie
SDL_Event evento; //Definimos una variable de eventos
// Inicializamos SDL
if (SDL_Init(SDL_INIT_VIDEO)) {
//En Caso de error
fprintf(sdterr,"Error al inicializar SDL: %s\n",SDL_GetError() );
exit(1);
}
atexit(SDL_Quit); // Al salir, cierra SDL
// Establecemos el modo de pantalla
pantalla = SDL_SetVideoMode(640,480,0,SDL_ANYFORMAT);
if (pantalla == Null) {
//Si no hemos podido inicializar la superficie
fprintf(stderr,"Error al crear la superficie: %s \n",SDL_GetError() );
exit(1);
}
// Personalizamos el título de la ventana
SDL_WM_SetCaption("Hola mundo",NULL);
//Bucle infinito
for(;;) {
//Consultamos los eventos
while (SDL_PollEvent(&evento)){
if (evento.type == SDL_QUIT) //si es de salida
return 0;
}
}
}
compilo con : g++ -o test Prueba.cpp `sdl2-config --cflags --libs` y me salen errores de compilación
Citar
prueba.cpp: In function 'int main()':
prueba.cpp:17:11: error: 'sdterr' was not declared in this scope
fprintf(sdterr,"Error al inicializar SDL: %s\n",SDL_GetError() );
^
prueba.cpp:22:40: error: 'SDL_ANYFORMAT' was not declared in this scope
pantalla = SDL_SetVideoMode(640,480,0,SDL_ANYFORMAT);
^
prueba.cpp:22:53: error: 'SDL_SetVideoMode' was not declared in this scope
pantalla = SDL_SetVideoMode(640,480,0,SDL_ANYFORMAT);
^
prueba.cpp:23:18: error: 'Null' was not declared in this scope
if (pantalla == Null) {
^
prueba.cpp:29:37: error: 'SDL_WM_SetCaption' was not declared in this scope
SDL_WM_SetCaption("Hola mundo",NULL);
^
Si alguien sabe algún tutorial de SDL2, la verdad hace días que los busco y nada.
Desde ya muchas gracias y espero que varios también aprendan con mis dudas
Para empezar,
Citarprueba.cpp:17:11: error: 'sdterr' was not declared in this scope
fprintf(sdterr,"Error al inicializar SDL: %s\n",SDL_GetError() );
es
stderr no
sdterr
Citarif (pantalla == Null) {
es NULL no Null
probaste con "pkg-config --cflags sdl2 --libs sdl2" en vez de sdl2-config?
Este Hola Mundo Si funciona según dicen a mi me dice falta el dispositivo de video >:D. Espero les sirva.
#include <iostream>
#include "SDL2/SDL.h"
int main(int argc, char** argv){
if (SDL_Init(SDL_INIT_EVERYTHING) == -1){
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Window *win = NULL;
win = SDL_CreateWindow("Hola Mundo!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
if (win == NULL){
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Renderer *ren = NULL;
ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (ren == NULL){
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Surface *bmp = NULL;
bmp = SDL_LoadBMP("hello.bmp");
if (bmp == NULL){
std::cout << SDL_GetError() << std::endl;
return 1;
}
SDL_Texture *tex = NULL;
tex = SDL_CreateTextureFromSurface(ren, bmp);
SDL_FreeSurface(bmp);
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tex, NULL, NULL);
SDL_RenderPresent(ren);
SDL_Delay(2000);
SDL_DestroyTexture(tex);
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
Stakewinner00 Gracias por tomarte tu tiempo : ya corregí sdterr por stderr, y ya probe tu sugerencia y me salen mucho menos errores gracias. ;D , pero sigue sin compilar .
Si el inglés no es un problema para ti:
http://www.willusher.io/pages/sdl2/
gracias por el aporte ;-)
Si es en ingles es mejor, pero de todos modos te dejo este en español, que tiene como 700 páginas; http://www.mediafire.com/download/af7v8arym7ypx5q/tutorialWikiLibSDL-20080131.pdf