Hlavní navigace

SDL: Hry nejen pro Linux (24)

Michal Turek

Dvacátý čtvrtý díl je shrnutím celé série o multiplatformní knihovně SDL. Celý text je strukturován podle jednotlivých článků, u každého je uveden úvodní odstavec spolu se seznamem SDL příkazů, které v něm byly probrány. Na konci naleznete také PDF k vytištění.

SDL #1 – Úvod

V této sérii článků se vám představí knihovna SDL, která slouží pro vývoj her a multimediálních programů, její největší předností je možnost zkompilovat zdrojový kód pro všechny běžně používané operační systémy. Ukázkové programy budou napsány v jazyku C/C++ a zkompilovatelné minimálně pod operačními systémy GNU/Linux a MS Windows.

SDL #2 – Instalace SDL

Ve druhé části série si ukážeme, jak nainstalovat SDL, a dále budou uvedeny „step-by-step“ návody na vytvoření SDL projektů v gcc, MS Visual C++ a Dev-C++.

SDL #3 – Inicializace SDL programu

V první části článku se podíváme na konvenci názvů SDL funkcí a speciální datové typy, které SDL přináší. Ve druhé části bude popsána inicializace a deinicializace SDL.

  • SDL_Init()
  • SDL_InitSubSystem()
  • SDL_WasInit()
  • SDL_GetError()
  • SDL_SetError()
  • SDL_ClearError()
  • SDL_Quit()
  • SDL_QuitSubSystem()

SDL #4 – Vytvoření okna

V minulém dílu jsme si dopodrobna vysvětlili inicializaci SDL, ale ještě něco málo zbylo – nastavení vlastností a vytvoření okna. Jak brzy zjistíme, v porovnání s např. Win32 API je tato činnost v SDL mnohem jednodušší.

  • SDL_SetVideoMode()
  • SDL_GetVideoSur­face()
  • SDL_VideoModeOK()
  • SDL_ListModes()
  • Struktura SDL_Rect
  • SDL_GetVideoInfo()
  • Struktura SDL_VideoInfo
  • SDL_VideoDriver­Name()
  • SDL_SetGamma()
  • SDL_SetGammaRamp()
  • SDL_GetGammaRamp()

SDL #5 – Zobrazování grafiky

Dnes se podíváme na grafické funkce poskytované knihovnou SDL. Vzhledem k rozsáhlosti tohoto tématu zde budou uvedeny pouze nejzákladnější věci, podrobnostem se budeme věnovat až v následujících dílech.

  • SDL_LoadBMP()
  • Knihovna SDL_image
  • IMG_Load()
  • SDL_SaveBMP()
  • SDL_FreeSurface()
  • SDL_DisplayFormat()
  • SDL_DisplayFor­matAlpha()
  • SDL_ConvertSur­face()
  • SDL_BlitSurface()
  • SDL_UpdateRect()
  • SDL_UpdateRects()
  • SDL_Flip()

SDL #6 – Operace se surfacem

V tomto dílu budeme dále rozvíjet naše znalosti o SDL grafice. Předvedeme si například, jak vyplnit surface barvou, jak docílit toho, aby určitá barva byla transparentní (průhledná), jak nastavit průhlednost i takového surface, který neobsahuje alfa kanál, a další užitečné věci.

  • SDL_CreateRGBSur­face()
  • SDL_CreateRGBSur­faceFrom()
  • SDL_SetClipRect()
  • SDL_GetClipRect()
  • SDL_MapRGB()
  • SDL_MapRGBA()
  • SDL_GetRGB()
  • SDL_GetRGBA()
  • SDL_FillRect()
  • SDL_SetColorKey()
  • SDL_SetAlpha()
  • SDL_SetColors()
  • SDL_SetPalette()

SDL #7 – Přímý přístup k pixelům, kurzory

Tentokrát se ponoříme trochu více do hloubky, popíšeme si SDL grafické struktury a tyto znalosti následně využijeme k přímému přístupu k pixelům obrázku. V závěru budeme také měnit kurzor myši.

  • Struktura SDL_Surface
  • Struktura SDL_PixelFormat
  • Struktura SDL_Palette
  • Struktura SDL_Color
  • SDL_LockSurface()
  • SDL_UnlockSurface()
  • SDL_MUSTLOCK()
  • SDL_CreateCursor()
  • SDL_FreeCursor()
  • SDL_SetCursor()
  • SDL_GetCursor()
  • SDL_ShowCursor()

SDL #8 – OpenGL

Díky přímé podpoře OpenGL umožňuje SDL renderovat i 3D grafické objekty, které se staly nepsaným standardem naprosté většiny dnešních her. Tentokrát se tedy budeme věnovat podpoře OpenGL v SDL.

  • Knihovna OpenGL
  • SDL_GL_SetAttri­bute()
  • SDL_GL_GetAttri­bute()
  • SDL_GL_SwapBuf­fers()
  • SDL_GL_GetPro­cAddress()
  • SDL_GL_LoadLi­brary()

SDL #9 – Výstup textu pomocí SDL_ttf

V dnešním dílu bude popsána knihovna SDL_ttf, která slouží pro výpisy textů do scény. Se zobrazením textů a především s českými znaky bývá někdy potíž, nicméně použití SDL_ttf je velice jednoduché a naprosto bezproblémové.

  • Knihovna SDL_ttf
  • TTF_Init()
  • TTF_Quit()
  • TTF_WasInit()
  • TTF_GetError()
  • TTF_SetError()
  • Struktura TTF_Font
  • TTF_OpenFont()
  • TTF_OpenFontIndex()
  • TTF_OpenFontIn­dexRW()
  • TTF_CloseFont()
  • TTF_RenderTex­t_Solid()
  • TTF_RenderUTF8_So­lid()
  • TTF_RenderUNI­CODE_Solid()
  • TTF_RenderTex­t_Shaded()
  • TTF_RenderUTF8_Sha­ded()
  • TTF_RenderUNI­CODE_Shaded()
  • TTF_RenderTex­t_Blended()
  • TTF_RenderUTF8_Blen­ded()
  • TTF_RenderUNI­CODE_Blended()
  • TTF_RenderGlyp­h_Solid()
  • TTF_RenderGlyp­h_Shaded()
  • TTF_RenderGlyp­h_Blended(
  • TTF_SetFontStyle()
  • TTF_GetFontStyle()
  • TTF_SizeText()
  • TTF_SizeUTF8()
  • TTF_SizeUNICODE()
  • TTF_FontHeight()
  • TTF_FontLineSkip()
  • TTF_FontAscent()
  • TTF_FontDescent()
  • TTF_GlyphMetrics()
  • TTF_ByteSwappe­dUNICODE()
  • TTF_FontFaceFa­milyName()
  • TTF_FontFaceS­tyleName()
  • TTF_FontFaceIs­FixedWidth()
  • TTF_FontFaces()

SDL #10 – Komunikace se správcem oken, úvod do událostí

Seriál se přehoupl do druhé desítky, příště už na počítání přestanou stačit prsty ;-). Ale ještě než se tak stane, probereme si komunikaci aplikace se správcem oken, což v sobě zahrnuje změnu titulku okna, minimalizaci, přepínání do/z fullscreenu a několik dalších věcí. Ke konci bude také přidán lehký úvod do zpracování událostí.

  • SDL_WM_SetCaption()
  • SDL_WM_GetCaption()
  • SDL_WM_SetIcon()
  • SDL_WM_Iconify­Window()
  • SDL_WM_Toggle­FullScreen()
  • SDL_WM_GrabInput()

SDL #11 – Fronta událostí

Na konci minulého dílu jsme nakousli základní práci s událostmi, dnes budeme pokračovat. Tento článek je primárně věnován práci s frontou událostí, ale jelikož ještě nevíme nic o unionu SDL_Event, bude částečně probrán i on.

  • Union SDL_Event
  • SDL_PollEvent()
  • SDL_WaitEvent()
  • SDL_PumpEvents()
  • SDL_PushEvent()
  • SDL_PeepEvents()
  • SDL_EventState()
  • SDL_SetEventFil­ter()
  • SDL_GetEventFil­ter()

SDL #12 – Klávesnice

Pravděpodobně nejpoužívanějšími vstupními zařízeními počítače jsou klávesnice a myš, v našem seriálu začneme právě klávesnicí. Podíváme se na ni jak z událostního pohledu, tak „přímým“ přístupem a uděláme první krok k interaktivním hrám.

  • Struktura SDL_KeyboardEvent
  • Struktura SDL_keysym
  • Struktura SDLMod
  • SDL_EnableUNICODE()
  • SDL_EnableKey­Repeat()
  • SDL_GetKeyState()
  • SDL_GetModState()
  • SDL_SetModState()
  • SDL_GetKeyName()

SDL #13 – Myš

Na řadě je další vstupní zařízení, tentokrát se jedná o myš. Opět se budeme věnovat jak událostem, tak přímému přístupu.

  • Struktura SDL_MouseButto­nEvent
  • Struktura SDL_MouseMoti­onEvent
  • SDL_BUTTON()
  • SDL_GetMouseState()
  • SDL_GetRelati­veMouseState()
  • SDL_WarpMouse()

SDL #14 – Joystick

Joysticky, kniply, páky a jiné ovladače bývají nedílnou součástí většiny her, hlavně simulátorů. Tento díl bude věnován právě jim.

  • SDL_NumJoysticks()
  • SDL_JoystickOpen()
  • Struktura SDL_Joystick
  • SDL_JoystickO­pened()
  • SDL_JoystickClose()
  • SDL_JoystickName()
  • SDL_JoystickIndex()
  • SDL_JoystickNu­mAxes()
  • SDL_JoystickNum­Balls()
  • SDL_JoystickNum­Hats()
  • SDL_JoystickNum­Buttons()
  • SDL_JoystickE­ventState()
  • Struktura SDL_JoyAxisEvent
  • Struktura SDL_JoyButtonEvent
  • Struktura SDL_JoyBallEvent
  • Struktura SDL_JoyHatEvent
  • SDL_JoystickUp­date()
  • SDL_JoystickGe­tAxis()
  • SDL_JoystickGet­Button()
  • SDL_JoystickGet­Ball()
  • SDL_JoystickGet­Hat()

SDL #15 – Ostatní události

V dnešním dílu o knihovně SDL dokončíme popis událostního systému. Budeme se mimo jiné věnovat změnám velikosti okna, jeho aktivacím a deaktivacím, posílání uživatelských zpráv a dalším věcem, které ještě zbývá probrat.

  • Struktura SDL_QuitEvent
  • Struktura SDL_ResizeEvent
  • Struktura SDL_ExposeEvent
  • Struktura SDL_ActiveEvent
  • SDL_GetAppState()
  • Struktura SDL_UserEvent
  • Struktura SDL_SysWMEvent

SDL #16 – Časovače a práce s časem

V dnešním dílu se podíváme na systémové časovače a funkce pro práci s časem. Na konci budou také v rychlosti zmíněny rychlostní optimalizace včetně výpočtu FPS.

  • SDL_AddTimer()
  • SDL_RemoveTimer()
  • SDL_Delay()
  • SDL_GetTicks()

SDL #17 – Zvuky a hudba

V dnešním dílu o knihovně SDL začneme nový tematický celek, budou jím zvuky a hudba, které přinesou konec všem tichým aplikacím. Na první pohled by se mohlo zdát, že si musí naprostou většinu funkčnosti napsat programátor sám, nicméně je možné používat již hotový mixer v podobě rozšiřující knihovny SDL_mixer, který odstraní většinu námahy.

  • SDL_AudioDriver­Name()
  • Struktura SDL_AudioSpec
  • SDL_LockAudio()
  • SDL_UnlockAudio()
  • SDL_OpenAudio()
  • SDL_PauseAudio()
  • SDL_GetAudioS­tatus()
  • SDL_CloseAudio()
  • SDL_LoadWAV()
  • SDL_FreeWAV()
  • SDL_MixAudio()

SDL #18 – Konverze zvuků, knihovna SDL_sound

V tomto dílu konverzemi zvuků dokončíme popis funkcí, které SDL poskytuje pro audio. Druhá část článku bude věnována rozšiřující knihovně SDL_sound, která slouží pro dekódování zvuků z .MP3, .MID, .OGG a dalších běžně rozšířených typů souborů.

  • Struktura SDL_AudioCVT
  • SDL_BuildAudioCVT()
  • SDL_ConvertAudio()
  • Knihovna SDL_sound
  • Sound_Init()
  • Sound_Quit()
  • Sound_GetError()
  • Sound_ClearError()
  • Sound_Available­Decoders()
  • Struktura Sound_DecoderInfo
  • Sound_NewSample()
  • Sound_NewSample­FromFile()
  • Struktura Sound_AudioInfo
  • Struktura Sound_Sample
  • Sound_FreeSample()
  • Sound_Decode()
  • Sound_DecodeAll()
  • Sound_SetBuffer­Size()
  • Sound_Rewind()
  • Sound_Seek()

SDL #19 – Přehrávání zvuků pomocí SDL_mixer

Vše, co se týká SDL audio funkcí, už máme probráno, takže se zkusíme podívat na rozšiřující knihovnu SDL_mixer. Knihovna SDL_mixer poskytuje snadno použitelné funkce pro mixování zvuků a hudby. Je vhodná obzvlášť pro ty, kterým připadá standardní SDL audio API příliš nízkoúrovňové a strohé.

  • Knihovna SDL_mixer
  • Mix_OpenAudio()
  • Mix_CloseAudio()
  • Mix_GetError()
  • Mix_SetError(
  • Mix_QuerySpec()
  • Mix_LoadWAV()
  • Mix_LoadWAV_RW()
  • Mix_QuickLoad_WAV()
  • Mix_QuickLoad_RAW()
  • Mix_FreeChunk()
  • Mix_VolumeChunk()
  • Mix_AllocateChan­nels()
  • Mix_Volume()
  • Mix_PlayChannel()
  • Mix_PlayChannel­Timed()
  • Mix_FadeInChannel()
  • Mix_FadeInChan­nelTimed()
  • Mix_Pause()
  • Mix_Resume()
  • Mix_HaltChannel()
  • Mix_ExpireChannel()
  • Mix_FadeOutChan­nel()
  • Mix_ChannelFi­nished()
  • Mix_Playing()
  • Mix_Paused()
  • Mix_FadingChannel()

SDL #20 – Hudba a efekty

Ve 20. dílu dokončíme popis knihovny SDL_mixer. Budeme se bavit především o hudbě a speciálních efektech, jako je nastavení rozdílné hlasitosti levého a pravého kanálu nebo simulace ztišení vlivem vzdálenosti zdroje zvuku od posluchače.

  • Struktura Mix_Music
  • Mix_LoadMUS()
  • Mix_FreeMusic()
  • Mix_PlayMusic()
  • Mix_FadeInMusic()
  • Mix_FadeInMusic­Pos()
  • Mix_HookMusic()
  • Mix_GetMusicHo­okData()
  • Mix_VolumeMusic()
  • Mix_PauseMusic()
  • Mix_ResumeMusic()
  • Mix_RewindMusic()
  • Mix_SetMusicPo­sition()
  • Mix_SetMusicCMD()
  • Mix_HaltMusic()
  • Mix_FadeOutMusic()
  • Mix_HookMusic­Finished()
  • Mix_GetMusicType()
  • Mix_PlayingMusic()
  • Mix_PausedMusic()
  • Mix_FadingMusic()
  • Mix_SetPanning()
  • Mix_SetDistance()
  • Mix_SetPosition()
  • Mix_SetReverseS­tereo()
  • Mix_RegisterEf­fect()
  • Mix_Unregiste­rEffect()
  • Mix_Unregiste­rAllEffects()
  • Mix_SetPostMix()
  • Mix_ReserveChan­nels()
  • Mix_GroupChannel()
  • Mix_GroupChannels()
  • Mix_GroupCount()
  • Mix_GroupAvai­lable()
  • Mix_GroupOldest()
  • Mix_GroupNewer()
  • Mix_FadeOutGroup()
  • Mix_HaltGroup()

SDL #21 – CD-ROM

Další oblastí knihovny SDL, kterou si popíšeme, bude API pro práci s CD-ROM. Po přečtení tohoto článku byste měli být schopni si vytvořit jednoduchý CD přehrávač, který zahrnuje přehrávání a pauzy, listování a pohyb ve skladbách a také vysouvání mechaniky pro vložení nového disku.

  • SDL_CDNumDrives()
  • SDL_CDName()
  • SDL_CDOpen()
  • SDL_CDClose()
  • SDL_CDStatus()
  • CD_INDRIVE()
  • Struktura SDL_CD
  • Struktura SDL_CDtrack
  • FRAMES_TO_MSF()
  • MSF_TO_FRAMES()
  • SDL_CDPlay()
  • SDL_CDPlayTracks()
  • SDL_CDPause()
  • SDL_CDResume()
  • SDL_CDStop()
  • SDL_CDEject()

SDL #22 – Vícevláknové programování

V dnešním dílu o knihovně SDL se budeme věnovat podpoře tzv. vícevláknového programování. Podíváme se na vytváření nových vláken a samozřejmě také na jejich synchronizaci, která nikdy nesmí chybět.

  • SDL_CreateThread()
  • SDL_WaitThread()
  • SDL_KillThread()
  • SDL_ThreadID()
  • SDL_GetThreadID()
  • Struktura SDL_mutex
  • SDL_CreateMutex()
  • SDL_DestroyMutex()
  • SDL_LockMutex()
  • SDL_mutexP()
  • SDL_UnlockMutex()
  • SDL_mutexV()
  • Struktura SDL_sem
  • SDL_CreateSemap­hore()
  • SDL_DestroySe­maphore()
  • SDL_SemWait()
  • SDL_SemTryWait()
  • SDL_SemWaitTi­meout()
  • SDL_SemPost()
  • SDL_SemValue()
  • Struktura SDL_cond
  • SDL_CreateCond()
  • SDL_DestroyCond()
  • SDL_CondWait()
  • SDL_CondWaitTi­meout()
  • SDL_CondSignal()
  • SDL_CondBroadcast()

SDL #23 – SDL_RWops, SDL_Overlay + vše, na co se zapomnělo

V dnešním, závěrečném dílu o knihovně SDL se pokusím shrnout všechny věci, na které jsem během psaní seriálu pozapomněl, popř. kterým jsem z důvodu své neznalosti nevěnoval pozornost. Mimo jiné se budeme věnovat SDL_RWops, YUV video overlay, nahrávání sdílených knihoven za běhu aplikace a proměnným prostředí.

  • SDL_RWFromFile()
  • SDL_RWFromFP()
  • SDL_RWFromMem()
  • SDL_RWFromCon­stMem()
  • SDL_AllocRW()
  • SDL_FreeRW()
  • Struktura SDL_RWops
  • SDL_RWread()
  • SDL_RWwrite()
  • SDL_RWseek()
  • SDL_RWtell()
  • SDL_RWclose()
  • Struktura SDL_Overlay
  • SDL_CreateYUVO­verlay()
  • SDL_FreeYUVOver­lay()
  • SDL_LockYUVOver­lay()
  • SDL_UnlockYUVO­verlay()
  • SDL_DisplayYU­VOverlay()
  • SDL_putenv()
  • SDL_getenv()
  • SDL_LoadObject()
  • SDL_UnloadObject()
  • SDL_LoadFunction()
  • SDL_HasRDTSC()
  • SDL_HasMMX()
  • SDL_HasMMXExt()
  • SDL_Has3DNow()
  • SDL_Has3DNowExt()
  • SDL_HasSSE()
  • SDL_HasSSE2()
  • SDL_HasAltiVec()

SDL #24 – Obsah

Dvacátý čtvrtý díl je shrnutím celé série o multiplatformní knihovně SDL. Text je strukturován podle jednotlivých článků, u každého je uveden úvodní odstavec spolu se seznamem SDL příkazů, které v něm byly probrány.

PDF verze seriálu

Jako bonus na rozloučenou jsem pro všechny, kteří dočetli až sem ;-), vytvořil PDF verzi celého seriálu vhodnou pro tisk. Mimochodem má 110 stránek!

Download

Našli jste v článku chybu?

14. 3. 2013 18:43

Kowalsky (neregistrovaný)

Omluvám se, nevím jestli je to moje chyba nebo je chyba někde jinde, ale nejde mi PDF otevřít. Stáhne mi to nějaký balíkm který když extrahuju dostanu nějaký soubor .tar.....
Co s tím mám prosím dělat? Díky


24. 5. 2011 16:48

Mirda66 (neregistrovaný)

Seriál na úrovni. Pro mne, jakožto zarytého céčkaře bez plusů ideální studna pro mé experimenty.

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR