Koukal jsem se na implementaci a parametr icon je používán pouze pro X server, kde (volný překlad):
Vlastnost WM_ICON_NAME je řetězec, který se zobrazí v případě minimalizace okna (např. jako "icon label" - název vedle ikony). Včetně typu je podobný vlastnosti WM_NAME (titulek okna). Kvůli různým rozměrům bývá běžně viditelných méně znaků z WM_ICON_NAME, než z WM_NAME.
Tak jsem nahodou zabrousil na tento clanek a vyzkousel jsem uvedeny priklad s oknem, ktere jen ceka na klavesy. Prekvapilo me, ze to vytoci procesor na plne obratky. To by slusne vychovany program delat nemel, zvlaste kdyz nedela nic moc nez ceka na klavesu.
Zmenil jsem tedy funkci SDL_PollEvent za SDL_WaitEvent a pak uz jsem byl spokojeny. Podotykam, ze o SDL nic nevim a serial jsem necetl od zacatku. Pouze si myslim, ze bychom nemeli ucit uzivatele delat programy, ktere uzurpuji veskery vykon procesoru pro sebe (doba MSDOSU, kde takove programy mely sve opodstatneni, uz pominula).
Máte pravdu, v tomto případě nenacházím dostatečnou omluvu :-(
V počítačových hrách se obecně problémy tohoto typu nevyskytují. Programátoři spíše řeší otázku, jak přinutit hru, která už sama o sobě zabírá 100% procesoru, aby běžela ještě o nějakou tu desetinku FPS rychleji. Z tohoto důvodu se většinou ostatní procesy ignorují a vše se nechá běžet, jako zde, v cyklu, který je nejrychlejším řešením. Nicméně globálně souhlasím, že je rozdíl mezi programem, který čeká na stisky klávesy a programem, který v každém cyklu renderuje sto tisíc trojúhleníčků.
No, když nic jiného, mohl jsem alespoň přidat nějakou podmínku, která při FPS vyšším než je určitá hodnota zavolalo SDL_Delay(). V dalších článcích (které jsem ještě neodeslal do redakce) se na to pokusím myslet...
Mimochodem SDL_WaitEvent() je vhodné řešení pro tento "speciální" případ, ale obecně se moc ve hrách nevyskytuje. V případě prázdné fronty událostí by se všechno zastavilo (animace apod.). Něco málo o tom bude v příštím dílu.
Ja osobne nemam rad ani hry, ktere vytezuji procesor zbytecne na 100%. Takove hry nemaji na mem pocitaci vubec misto.
To, co pisete o animaci, by se vse melo resit timerama, tj. animace bezi podle nastaveni timeru
a neuzurpuje si cely procesor pro sebe. Takto se mel udelat i dalsi priklad, na ktery jsem se namatkove podival: polopruhledna koule putujici po duhovem pozadi, pate pokracovani.
Pokud by nekoho napadlo udelat "screensaver" tak, jako je v uvedenem prikladu s kouli, pak to neni saver niceho: ani obrazovky a navic to zahriva na plny vykon procesor. Tohle se typicky ma delat pres timery: pak to nebere procesoru skoro zadny vykon.
No, já se systémovými timery na podobné aplikace zrovna dobré zkušenosti nemám. Jsou sice dobrý, když chcece něco spouštět jednou za 100 milisekund a více, ale na něco trochu častějšího, jako je aktualizace scény, se vůbec nehodí, protože se všechno stává extrémně trhaným. Navíc není zaručeno, že aplikace dostane všechny zprávy (ve frontě může být vždy jen jedna, další se nevloží).
Z mého pohledu je pravděpodobně nejlepší renderování v cyklu a pokud je FPS vyšší než řekněme sto, program na chvíli uspat.
timto slavnostne oznamujeme ze pan vaclav klaus pracoval pro komunistickou rozvedku vaclav klaus kgb nkvd stb security service sicherheitsdiestns bordel spina hovno microsoft
neviem ci to tu nikto cita, ale za skusku to stoji:
cez SDL_WM_SetIcon mam nastavenu ikonu s bielym pozadim, pricom chcem aby dane biele pozadie bolo transparentne, ale neviem ako mam nastavit masku. dakujem