Portál AbcLinuxu, 12. května 2025 05:20

Dotaz: program v SDL

20.7.2003 14:00 Hales
program v SDL
Přečteno: 151×
Odpovědět | Admin
Všude jsem četl, že SDL je nízkoúrovnˇová knihovna pro praci pod grafickym prostředím a tudíž že je dˇábelsky rychlá. Když jsem udělal malý program, který pouze posunuje bitmapu po obrazovce, aniž bych ho nějakým způsobem zpomaloval (třeba fnc. Delay a podob.). Po spuštění programu na 1 Ghz PC program vcelku pohodově posouvá onu bitmapu po obrazovce - na muj vkus to moc fofry nejsou. Nevíte, jestli se dá zrychlit vykreslování, při použití SDL knihoven ???
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jiří Svoboda avatar 20.7.2003 14:29 Jiří Svoboda | skóre: 37 | blog: cat /dev/mind | Prostějov
Rozbalit Rozbalit vše program v SDL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vitej v klubu. :-) Ja zacal pred par mesici delat remake jedne pekne osmibitove hry (Atari/C64) a narazil jsem na to same. Po jistem patrani jsem prisel na to, ze 2D operace v Linuxove SDL _nejsou_akcelerovane_. :-( Takze jedina sance jak to zrychlit, je pouzit OpenGL (je taky v SDLku). Tzn. jet ve 3D a holt nepouzivat souradnici 'z'. Pak to pekne svisti. :-)
Pokud jde o tu hru, dodelal jsem graficky engine a ted uz jsem na to pekne dlouho nesah. :-(
20.7.2003 14:39 Hales
Rozbalit Rozbalit vše program v SDL
Tak to ti pekne dekuju. Taky jsem chtel udelat jednu gamesku, ale chtel jsem, aby to bezelo i na slabsich strojich, coz s open gl asi moc nepujde :o(
20.7.2003 16:46 Czerteak
Rozbalit Rozbalit vše program v SDL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Taky jsem SDL neco zkousel a muzu jen potvrdit, ze nejvetsi urychleni predstavuje jen spravan logika vykreslovani. Snazit se nekresli ani o pixel vic, ik kdyz to znamena sledovat kazdou zmenu. (Nejlepsi je pouzit regiony -> pridavat do nich obdelniky pri "off-screen" kresleni a pak z nich zase ty obdelniky, tentokrat uz neprekryvajici se, dostat...). Taky tam existuje nejaka funkce (bohuzel uz nevim, jak se jmenuje), ktera udela neco jako mapovani primo na cilovy zarizeni a vykreslovani je pak asi 2x rychlejsi. Proste se vytvori surface, zavola se neco jako surface->mapdeviceblabla() a je to :-). Jinak bohuzel nevim, jak by se to dalo zlepsit. Akcelerovany to ale podle mne je...
20.7.2003 19:39 Hales
Rozbalit Rozbalit vše program v SDL
Mate nejspis na mysli SDL_DisplayFormat () - coz stejne o moc nepomuze - na hratelnou trosku zabavnou hru je to porad dost pomaly - neuspokojivý :o(
20.7.2003 22:25 Czerteak
Rozbalit Rozbalit vše program v SDL
Jojo, myslim, ze to bude ono... No ja teda nevim, ale asi by to vazne chtelo nejaky optimalizace mimo SDL, mne rychlost docela uspokojila... :-)
21.7.2003 11:37 Hales
Rozbalit Rozbalit vše program v SDL
Máte na mysli nějakou jinou knohovnu (popřipadě jakou (multiplatfomní) ?) (Netším, co bych opimalizoval v mem programu, pokud tam ještě něco oříznu, tak už nepujde vidět vubec nic :o( )
27.7.2003 21:27 Ivo Danihelka | skóre: 3
Rozbalit Rozbalit vše program v SDL
Pro prozkoumani, ktera funkce zere nejvice procesoru jsem pouzival "gprof". Programek zkompiluj s flagy: -g -pg
27.7.2003 21:25 Ivo Danihelka | skóre: 3
Rozbalit Rozbalit vše program v SDL
Podle me SDL_DisplayFormat() pomuze hodne.

Koukni napr. na:
http://kvik.sh.cvut.cz/~fidlej/c.html#cars

S rychlosti jsem naprosto spokojen. Kdyztak se zeptej.

//---------------------------------------------------
/**
 * Nahraje obrazek z BMP souboru (nic vic).
 * Vhodne pro nahrati Ikony, kdyz jeste neni
 * inicializovana grafika
 */
	SDL_Surface *
CSystem::loadImageLight(const char *path)
{
	SDL_Surface *image_bmp;

	printf("Budu nahravat obrazek %s\n", path);

	image_bmp = SDL_LoadBMP(path);
	if (image_bmp == NULL) {
		// vynadani a konec
		CSystem::problemSDL();
	}

	return image_bmp;
}
//---------------------------------------------------
/**
 * Nahraje obrazek z BMP souboru
 * a prevede ho do zobrazitelneho stavu
 */
	SDL_Surface *
CSystem::loadImage(const char *path)
{
	SDL_Surface *image_bmp;
	SDL_Surface *surface;

	image_bmp = loadImageLight(path);

	surface = SDL_DisplayFormat(image_bmp);
	SDL_FreeSurface(image_bmp);
	return surface;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.