[SDL] Re: Problem with windowed SDL apps

Sami Näätänen sn.ml at bayminer.com
Sat Aug 20 05:04:00 PDT 2005


On Friday 19 August 2005 20:49, James Buchwald wrote:
> Ryan C. Gordon <icculus <at> clutteredmind.org> writes:
> > > I'm having a problem with windowed SDL applications. Whenever I
> > > start them, the frame appears, but the graphics do not; whatever
> > > was running in the background
> > > appears in the screen. Has anyone else had this problem, and what
> > > is the easiest solution to this problem?
> >
> > What platform are you using, and can you show us a simple program
> > that does it? (or just an existing SDL program that does it)?
> >
> > Thanks,
> > --ryan.
>
> I'm using Windows XP SP2 with Visual C++ 6 for a compiler. Here's
> some of the code that gives me this problem:
>
> SDL_Surface *screen;
>
> void render()
> {
>   // Lock surface if needed
>   if (SDL_MUSTLOCK(screen))
>     if (SDL_LockSurface(screen) < 0)
>       return;

Have you tried to print something instead of this return?
Just wondering if this part is broken in your SDL in your configuration.

>   // Ask SDL for the time in milliseconds
>   int tick = SDL_GetTicks();
>
>   // Declare a couple of variables
>   int i, j, yofs, ofs;
>
>   // Draw to screen
>   yofs = 0;
>   for (i = 0; i < 480; i++)
>   {
>     for (j = 0, ofs = yofs; j < 640; j++, ofs++)
>     {
>       ((unsigned int*)screen->pixels)[ofs] = i * i + j * j + tick;
>     }
>     yofs += screen->pitch / 4;
>   }
>
>   // Unlock if needed
>   if (SDL_MUSTLOCK(screen))
>     SDL_UnlockSurface(screen);
>
>   // Tell SDL to update the whole screen
>   SDL_UpdateRect(screen, 0, 0, 640, 480);
> }
>
>
> // Entry point
> int main(int argc, char *argv[])
> {
>   // Initialize SDL's subsystems - in this case, only video.
>   if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
>   {
>     fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
>     exit(1);
>   }
>
>   // Register SDL_Quit to be called at exit; makes sure things are
>   // cleaned up when we quit.
>   atexit(SDL_Quit);
>
>   // Attempt to create a 640x480 window with 32bit pixels.
>   screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
>
>   // If we fail, return error.
>   if ( screen == NULL )
>   {
>     fprintf(stderr, "Unable to set 640x480 video: %s\n",
> SDL_GetError()); exit(1);
>   }
>
>   // Main loop: loop forever.
>   while (1)
>   {
>     // Render stuff
>     render();
>
>     // Poll for events, and handle the ones we care about.
>     SDL_Event event;
>     while (SDL_PollEvent(&event))
>     {
>       switch (event.type)
>       {
>       case SDL_KEYDOWN:
>         break;
>       case SDL_KEYUP:
>         // If escape is pressed, return (and thus, quit)
>         if (event.key.keysym.sym == SDLK_ESCAPE)
>           return 0;
>         break;
>       case SDL_QUIT:
>         return(0);
>       }
>     }
>   }
>   return 0;
> }
>
> I'm including all the necessary files(there's a bunch of
> commented-out old code inbetween the includes and this code, so I
> didn't post them). This code is from Sol's SDL tutorial. If I change
> the video type from SDL_SWSURFACE to SDL_FULLSCREEN, then it works
> fine. The problem is, the application I am developing needs to be
> contained within a window.
>
>
> _______________________________________________
> SDL mailing list
> SDL at libsdl.org
> http://www.libsdl.org/mailman/listinfo/sdl




More information about the SDL mailing list