[C++/SDL] Program zacina sie

0

Witajcie. Uczę się dopiero, napisałem pierwszy programik w SDL ale program sie zacina i nic nie wyświetla
Oto kod :

#include "SDL.h"
#include <string>

SDL_Surface *screen = NULL;
SDL_Surface *obraz = NULL;

SDL_Surface *load_bmp(std::string filename)
{
	SDL_Surface *obraz = NULL;
	SDL_Surface *optymalny = NULL;

	obraz = SDL_LoadBMP(filename.c_str());
		
	if(obraz != NULL)
	{
		optymalny = SDL_DisplayFormat(obraz);
		SDL_FreeSurface(obraz);
	}
	return optymalny;
}


int main( int argc, char* args[] )
{
	SDL_Init(SDL_INIT_EVERYTHING);
	screen = SDL_SetVideoMode(800,600,32, SDL_SWSURFACE);

	load_bmp("pic1.bmp");

	SDL_BlitSurface(obraz,NULL,screen,NULL);

	SDL_Flip(screen);
	SDL_Delay(30000);
	SDL_FreeSurface(obraz);
	SDL_Quit();

	return 0;

}

 

Co jest z nim nie tak ? Nie wywala żadnych błędów...

0

Poprawiłem literówke z
load_bmp("pic1.bmp"); na obraz = load_bmp("pic1.bmp");

Lecz dalej nie działa..

0

Sprawdz, czy przypadkiem loadbmp Ci nie zwraca NULL, a po drugie wywal te globalne zmienne, bo nie potrzebnie je przeslaniasz samemu sobie komplikujac.
Mniej wiecej tak zrob:

#include "SDL.h"
#include <string>

SDL_Surface *load_bmp(std::string filename)
{
        SDL_Surface *obraz = NULL;
        SDL_Surface *optymalny = NULL;

        obraz = SDL_LoadBMP(filename.c_str());
               
        if(obraz != NULL)
        {
                optymalny = SDL_DisplayFormat(obraz);
                SDL_FreeSurface(obraz);
        }
        return optymalny;
}


int main( int argc, char* args[] )
{
	SDL_Surface *obraz, *screen;

        SDL_Init(SDL_INIT_EVERYTHING);
        screen = SDL_SetVideoMode(800,600,32, SDL_SWSURFACE);

        if((obraz = load_bmp("pic1.bmp")) == NULL)
		return -1;

        SDL_BlitSurface(obraz,NULL,screen,NULL);

        SDL_Flip(screen);
        SDL_Delay(2000);
        SDL_FreeSurface(obraz);
        SDL_Quit();

        return 0;

}
0

@up nie, nie zwraca mi 0, wszystko jest dobrze a jednak sie zacina i czarny ekran...

Somebody help me ?

0

t0m_k no jest poprawa, wyświetla się rysunek ale nadal program się zacina !

0

Ale w sensie że zawiesza, czy na 2s wisi i znika.

0

Zacina się w sensie zacina... Jest napisane "brak odpowiedzi" i muszę wyłączyć program przez menadżera zadań albo "stop debb~~"

0

SDL_FreeSurface(screen) brakuje jeszcze ;)

0

Z tego co wiem, to nie trzeba tego screena dawać do FreeSurface, ale już dodawałem i nadal to samo : ))

Czekam na dalsze propozycje ; ]

0

Debugger

0

Trzeba wszystko zwalniac. U mnie brak tego spowodowal tak samo padniecie mimo SDL_Delay. Na Windowsach czasami przez samo SDL_Delay wywala brak odpowiedzi, zwlaszcza jak jest na dluzszy czas (30s Ty masz). Powierzchnie normalnie dales w pamiec systemu, wiec lockery nie sa potrzebne. Dodaj do mojego kodu to FreeSurface i wywal SDL_Delay, a potem napisz czy pada, czy nie.

0

Dzięki :D Przerobiłem kod na takiego dziada :

 #include "SDL.h"
#include <string>

SDL_Surface *screen = NULL;
SDL_Surface *obraz = NULL;
SDL_Event event;


SDL_Surface *load_bmp(std::string filename)
{
        SDL_Surface *obraz = NULL;
        SDL_Surface *optymalny = NULL;

        obraz = SDL_LoadBMP(filename.c_str());
               
        if(obraz != NULL)
        {
                optymalny = SDL_DisplayFormat(obraz);
                SDL_FreeSurface(obraz);
        }
        return optymalny;
}


int main( int argc, char* args[] )
{
        SDL_Surface *obraz;

		bool wyjscie = false;

        SDL_Init(SDL_INIT_EVERYTHING);
        screen = SDL_SetVideoMode(800,600,32, SDL_SWSURFACE);

		while(wyjscie == false)
		{
			while(SDL_PollEvent(&event))
			{
				if(event.type == SDL_QUIT)
				{
					wyjscie = true;
				}

        if((obraz = load_bmp("pic1.bmp")) == NULL)
                return -1;

        SDL_BlitSurface(obraz,NULL,screen,NULL);

        SDL_Flip(screen);
			}
		}
        SDL_FreeSurface(obraz);
		SDL_FreeSurface(screen);
        SDL_Quit();

        return 0;

}

I działa ! Wywaliłem to SDL_Delay i pomogło :) Z góry dzięki

0

Wrzuc jeszcze te 3 linijki przed petle i bedzie git :)

if((obraz = load_bmp("pic1.bmp")) == NULL)
                return -1;
SDL_BlitSurface(obraz,NULL,screen,NULL);
SDL_Flip(screen);

Tej zmiennej globalnej obraz nigdy nie uzywasz w tym kodzie. Ogolnie zmiennych globalnych lepiej unikac, poniewaz rozne ciezko-wykrywalne bledy moga powodowac.

0

Ok, dzięki :)))
Temat można zamknąć / usunąć

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.