Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Crash bij SDL programma  (gelezen 519 keer)

ECoder

  • Gast
Crash bij SDL programma
« Gepost op: 2008/04/02, 15:56:47 »
Hallo,

Ik ben laatst wat gaan experimenteren met SDL. Het programma loopt vast en ik kans niks meer doen, muziek blijft doorspelen maar CTRL + ALT + BACKSPACE werkt niet, kan niet naar shell met ALT + F2.

Nu tekende ik willekeurige punten op het venster en sloot het programma af zodra er een key-event was, ik roep constant een pixel aan in het geheugen en dat is ook niet echt heel netjes wat nogal een belasting is voor de video-kaart (lijkt mij).

Maar het is nogal irritant om elke keer te moeten rebooten als er zo iets gebeurt. Hoe kan ik weer controle over m'n computer krijgen zonder te rebooten?

Hier de code:
void DrawPixel(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B, int x, int y)
{
    Uint32 color = SDL_MapRGB(screen->format, R, G, B);

    if ( SDL_MUSTLOCK(screen) ) {
        if ( SDL_LockSurface(screen) < 0 ) {
            return;
        }
    }
    switch (screen->format->BytesPerPixel) {
        case 1: { /* Assuming 8-bpp */
            Uint8 *bufp;

            bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
            *bufp = color;
        }
        break;

        case 2: { /* Probably 15-bpp or 16-bpp */
            Uint16 *bufp;

            bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
            *bufp = color;
        }
        break;

        case 3: { /* Slow 24-bpp mode, usually not used */
            Uint8 *bufp;

            bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
            *(bufp+screen->format->Rshift/8) = R;
            *(bufp+screen->format->Gshift/8) = G;
            *(bufp+screen->format->Bshift/8) = B;
        }
        break;

        case 4: { /* Probably 32-bpp */
            Uint32 *bufp;

            bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
            *bufp = color;
        }
        break;
    }
    if ( SDL_MUSTLOCK(screen) ) {
        SDL_UnlockSurface(screen);
    }
    SDL_UpdateRect(screen, x, y, 1, 1);
}
En:

while( event.type != SDL_KEYDOWN )
{
    SDL_PollEvent( &event );
    x = rand() % 639;
    y = rand() % 300;
    DrawPixel ( screen, 100, 100, 100, x, y );
}
Alvast bedankt,

Peter