[SDL] SDL fullscreen problem
cocobear
cocobear.cn at gmail.com
Tue Sep 4 07:01:40 PDT 2007
于 Tue, 4 Sep 2007 10:35:08 +0200 (CEST)
"Torsten Giebl" <wizard at syntheticsw.com> 写道:
> Hello !
>
>
> >> When I run a program in X system on F7 ,the X crashed ,just like I
> >> press
> >> CTRL+ALT+BACKSPACE.
> >> It is sure that the code has no problem,I get it from linux game
> >> programming.
> >> What's the problem?
> >>
> >>
> >> the code is below,
> >>
> >> #include <SDL/SDL.h>
> >> #include <stdio.h>
> >> #include <stdlib.h>
>
> Use #include "SDL.h" and use it after stdio.h and stdlib.h
>
I should use #include "SDL/SDL.h",because if I use "SDL.h",the GCC
could't find SDL.h
My SDL.h is in /usr/include/SDL/SDL.h
> >> Uint16 CreateHicolorPixel(SDL_PixelFormat * fmt, Uint8 red,
> >> Uint8 green, Uint8 blue)
> >> {
> >> Uint16 value;
>
> You use Uint16 but you are running with SDL_SetVideoMode (..,24,..)
> so better use a Uint32 for pixel values.
>
> >> value = ((red >> fmt->Rloss) << fmt->Rshift) +
> >> ((green >> fmt->Gloss) << fmt->Gshift) +
> >> ((blue >> fmt->Bloss) << fmt->Bshift);
> >> return value;
> >> }
>
> Better use the SetPixel function from the SDL website.
>
> >> int main()
>
> To be portable do int main(int argc, char *argv [])
>
Good advice.
> >> {
> >> SDL_Surface *screen;
> >> Uint16 *raw_pixels;
> >> int x, y;
> >> if (SDL_Init(SDL_INIT_VIDEO) != 0) {
> >> printf("Unable to initialize SDL: %s\n", SDL_GetError());
> >> return 1;
> >> }
> >> atexit(SDL_Quit);
> >> screen = SDL_SetVideoMode(256, 256, 24,
> >> SDL_FULLSCREEN|SDL_SWSURFACE);
> >> if (screen == NULL) {
> >> printf("Unable to set video mode: %s\n", SDL_GetError());
> >> return 1;
> >> }
>
> Do an if SDL_MUSTLOCK (screen) true then only lock the surface.
>
> >> SDL_LockSurface(screen);
> >> raw_pixels = (Uint16 *) screen->pixels;
> >> for (x = 0; x < 256; x++) {
> >> for (y = 0; y < 256; y++) {
> >> Uint16 pixel_color;
> >> int offset;
> >> pixel_color = CreateHicolorPixel(screen->format,
> >> x, 0, y);
> >> offset = (screen->pitch / 2 * y + x);
> >> raw_pixels[offset] = pixel_color;
> >> }
> >> }
> >> SDL_UnlockSurface(screen);
>
> The same with SDL_MUSTLOCK as above
>
> >> SDL_UpdateRect(screen, 10, 10, 200, 120);
> >> SDL_Delay(3000);
> >> return 0;
> >> }
>
>
> CU
>
Thanks for you reply,but the problem is when I set SDL to the
fullscreen mode , the X system will crashed. Even if I do nothing,just
set it fullscreen.
#include <stdlib.h>
#include "SDL/SDL.h"
int main(int argc, char* argv[])
{
SDL_Surface *screen;
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(640, 480, 16, SDL_FULLSCREEN);
if (screen == NULL) {
printf("Unable to set video mode: %s\n", SDL_GetError());
return 1;
}
printf("Success!\n");
return 0;
}
When I run this simple code , the X crashed too!
Does it the bug of SDL?
My os is Fedora 7.
/*
*Welcome to cocobear's home!
*http://cocobear.cn
*/
More information about the SDL
mailing list