[SDL] Core dumped while SDL_FillRect or SDL_BlitSurface
Ignacio Lorenzo Subirá Otal
nachootal at salle.url.edu
Tue Oct 23 07:51:15 PDT 2007
The problem is exactly that I create the pointer before knowing where it
exactly points.... A matter of newby maybe....
Thank you very much,
Nacho
El mar, 23-10-2007 a las 16:09 +0200, Alberto Luaces escribió:
> Hi,
>
> it crashes because you are calling SDL_FillRect with an undefined SDL_Surface,
> info.Pantalla . When you call RellenarEstructura(), you are passing an
> undefined value (the one it is holding "screen"), that gets stored in the
> info structure. Later calls with this value leads to crash. You have to
> fill "screen" with the SetVideoMode() result before you begin to use it.
> Remember that when you copy the "screen" pointer to "info.pantalla" pointer,
> you are copying its value, so it will not be automatically updated when you
> change "screen" later.
>
> El Tuesday 23 October 2007 12:05:13 Ignacio Lorenzo Subirá Otal escribió:
> > Hi all!, I'm new to the list and I already have questions to ask...
> > I recently started to develop under SDL in a Ubuntu box and I have a
> > headeache with a function.
> > It just core dump's when I execute it when I perform a SDL_FillRect or a
> > SDL_BlitSurface.
> > I don't know why this can be because all seems to be right so I'll post
> > you the code and the error I get when executing.
> >
> > This is the function and the structure I use and as attachement I send
> > you all the code.
> > info is a global variable.
> > void LetrasArribaLetrasAbajo()
> > {
> > // Se muestran letras arriba y abajo sobre un fondo negro
> > SDL_Surface *textoa = NULL , *textob = NULL;
> > SDL_Rect rectangulo1, rectangulo2, parte1, parte2;
> > TTF_Font *fuente = NULL;
> > char textoamostrar[20];
> > float altura;
> > int valor;
> > fuente = TTF_OpenFont("Telegraphem.ttf", 75);//rutafuente1, 75);
> > // Acoto los dos textos
> > printf("Estoy en los textos\n");
> > strcpy(textoamostrar, "info.texto1");
> > //textoa = TTF_RenderText_Solid(fuente, "HOLA", *info.ColorFuente1);
> > textoa = TTF_RenderText_Solid(info.Fuente1, info.texto1,
> > *info.ColorFuente1);
> > strcpy(textoamostrar, info.texto2);
> > textob = TTF_RenderText_Solid(fuente, info.texto2, *info.ColorFuente2);
> > //textob = TTF_RenderText_Solid(info.Fuente2, "ADIOS",
> > *info.ColorFuente2);
> > parte1.w = textoa->w;
> > parte1.h = textoa->h;
> > parte2.w = textob->w;
> > parte2.h = textob->w;
> > // Calculo la posicion en las que voy a centrar ambas informaciones
> > altura = parte1.h + parte2.h;
> > // Sobrante
> > altura = info.h - altura;
> > printf("Altura sobrante %f\n", altura);
> > // Habr’a que controlar el error aqu’
> > // Reparto el sobrante en 3 y los distribuyo as’
> > // Sobrante/3
> > // Texto1
> > // Sobrante/3
> > // Texto2
> > // Sobrante/3
> > altura = altura / 3;
> > printf("Altura entre textos %f\n", altura);
> > parte1.y = info.y + (int) altura;
> > printf("Altura texto 1 %d\n", parte1.y);
> > parte2.y = parte1.y + parte1.h + (int) altura;
> > printf("Altura texto 2 %d\n", parte2.y);
> > // Tengo que centrar los textos en la horizontal
> > parte1.x = info.x + (int) ((info.w - parte1.w)/2);
> > parte2.x = info.x + (int) ((info.w - parte2.w)/2);
> > // Acoto los rect‡ngulos para los fondos
> > rectangulo1.x = info.x;
> > rectangulo1.y = info.y;
> > rectangulo1.w = info.w;
> > rectangulo1.h = parte1.h + (int) (3*altura/2); // Dejo los fondos a
> > mitad de fusi—n entre los dos textos
> > rectangulo2.x = rectangulo1.x;
> > rectangulo2.y = info.y + rectangulo1.h;
> > rectangulo2.w = info.w;
> > rectangulo2.h = parte2.h + (int) (3*altura/2);
> > // Llegados aqu’, tengo las m‡scaras para pintar en la pantalla, parte1
> > y parte2.
> > // Pongo los fondos
> > SDL_FillRect(info.Pantalla, &rectangulo1,
> > SDL_MapRGB(info.Pantalla->format, info.ColorFondo1->r,
> > info.ColorFondo1->g, info.ColorFondo1->b)); // IT CRASHES HERE
> > SDL_FillRect(info.Pantalla, &rectangulo2,
> > SDL_MapRGB(info.Pantalla->format, info.ColorFondo2->r,
> > info.ColorFondo2->g, info.ColorFondo2->b)); // ALSO CRASHES HERE IF I
> > COMMENT THE OTHER SDL_FillRect
> > // Pongo los textos
> > printf("Rectangulo 1 destino\n");
> > printf("x %d\n", parte1.x);
> > printf("y %d\n", parte1.y);
> > printf("w %d\n", parte1.w);
> > printf("h %d\n", parte1.h);
> > printf("Texto a Mostrar: %s\n", info.texto1);
> > printf("Rectangulo 2 destino\n");
> > printf("x %d\n", parte2.x);
> > printf("y %d\n", parte2.y);
> > printf("w %d\n", parte2.w);
> > printf("h %d\n", parte2.h);
> > printf("Texto a Mostrar: %s\n", info.texto2);
> > /*textoa = SDL_LoadBMP("imagen.bmp");
> > scanf("%d", &valor);*/
> > SDL_BlitSurface(textoa, NULL, info.Pantalla, &parte1); // ALSO HERE IF
> > I COMMENT THE UPPER ERRORS
> > SDL_BlitSurface(textob, NULL, info.Pantalla, &parte2); // AND HERE IF I
> > COMMENT THE UPPER BlitSurface
> > // Lo saco todo por pantalla
> > SDL_Flip(info.Pantalla);
> > // Libero la memoria que he cogido
> > SDL_FreeSurface(textoa);
> > SDL_FreeSurface(textob);
> > // Ya puedo salir
> > //scanf("%d", &valor);
> > }
> >
> > // THE STRUCTURE
> >
> > ypedef struct info_pantalla {
> > // Espero que se me inicialize todo aunque sea con NULL
> > char rutaicono1[20];
> > char rutaicono2[20];
> > TTF_Font *Fuente1;
> > TTF_Font *Fuente2;
> > SDL_Color *ColorFondo1;
> > SDL_Color *ColorFuente1;
> > char texto1[20];
> > SDL_Color *ColorFondo2;
> > SDL_Color *ColorFuente2;
> > char texto2[20];
> > SDL_Surface *Pantalla;
> > int x, y, w, h;
> > char blink1, blink2;
> > }info_pantalla;
>
>
> _______________________________________________
> SDL mailing list
> SDL at lists.libsdl.org
> http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
More information about the SDL
mailing list