Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Piirtäminen ei onnistu

Meitsi [31.05.2005 21:30:05]

#

Mistä johtuu että tällä koodilla saan vain kokoajan aikaan "Parachute deployment: segmentation fault:in"

#include <SDL/SDL.h>
#include <SDL/SDL_gfxPrimitives.h>
#include <SDL/SDL_rotozoom.h>

SDL_Surface *ruutu, *tekstuuri, *rot;
SDL_Event events;
bool running, textureDone;
Uint8 *nappi;
int hiiriX, hiiriY, kulma;
SDL_Rect piirtoalue;

#define SCREENWIDTH 640
#define SCREENHEIGHT 480

void piirraHiiri(int, int, Uint32);

int main(int argc, char *argv[])
{
    piirtoalue.x=0;
    piirtoalue.y=0;
    SDL_Init(SDL_INIT_VIDEO);
    ruutu = SDL_SetVideoMode(SCREENWIDTH, SCREENHEIGHT, 32, SDL_HWSURFACE /*| SDL_FULLSCREEN */| SDL_DOUBLEBUF);
    SDL_ShowCursor(false);

    running=true;
    while(running)
    {
        SDL_FillRect(ruutu, NULL, SDL_MapRGB(ruutu->format, 0, 0, 0));
        SDL_PollEvent(&events);
        nappi = SDL_GetKeyState(NULL);
        SDL_GetMouseState(&hiiriX, &hiiriY);
        if (events.type==SDL_QUIT || nappi[SDLK_ESCAPE]) running=false;

        if (!textureDone) {
        int xkohta, ykohta;
        xkohta=ykohta=0;
        if (SDL_MUSTLOCK(tekstuuri)) SDL_LockSurface(tekstuuri); //tämä pitää kommentoida pois niin toimii tuon alempana mainitun kanssa
        while (ykohta < SCREENHEIGHT)
        {
            while (xkohta < SCREENWIDTH)
            {
                pixelRGBA(tekstuuri, xkohta, ykohta, xkohta^ykohta, xkohta^ykohta, xkohta^ykohta, 255); //TÄHÄN kun vaihtaa "tekstuuri":n tilalle "ruutu" niin ohjelma toimii mutta tekstuuri piirretään ruudulle...
                ++xkohta;
            }
            xkohta=0;
            ++ykohta;
        }
        textureDone=true;
        if (SDL_MUSTLOCK(tekstuuri)) SDL_UnlockSurface(tekstuuri); //yämäkin vaatii poiskommentointia
        }
        if (kulma < 360){++kulma;}else{kulma=0;}
        rot = rotozoomSurface(tekstuuri, kulma, 1, 0);
        SDL_BlitSurface(rot, NULL, ruutu, &piirtoalue);
        piirraHiiri(hiiriX, hiiriY, 0x0000FFFF);

        SDL_Delay(1);
        SDL_Flip(ruutu);
    }
    SDL_ShowCursor(true);
    SDL_Quit();
    return 0;

}

void piirraHiiri(int x, int y, Uint32 color)
{
    lineColor(ruutu, x-10, y, x+10, y, color);
    lineColor(ruutu, x, y-10, x, y+10, color);
}

Kun vaihtaa että surface jonne piirrettään tuota XOR tekstuuria ei olekkaan "tekstuuri" vaan "ruutu" niin silloin toimii... Mistä voisi johtua?

Metabolix [31.05.2005 22:07:48]

#

Esimerkiksi siitä, että et ole luonut tekstuuria. SDL_CreateRGBSurface saattaisi auttaa.

Meitsi [31.05.2005 22:09:34]

#

...ja johan alkoi toimia. Kiitos!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta