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_GetVideoSurface()
- SDL_VideoModeOK()
- SDL_ListModes()
- Struktura SDL_Rect
- SDL_GetVideoInfo()
- Struktura SDL_VideoInfo
- SDL_VideoDriverName()
- 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_DisplayFormatAlpha()
- SDL_ConvertSurface()
- 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_CreateRGBSurface()
- SDL_CreateRGBSurfaceFrom()
- 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_SetAttribute()
- SDL_GL_GetAttribute()
- SDL_GL_SwapBuffers()
- SDL_GL_GetProcAddress()
- SDL_GL_LoadLibrary()
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_OpenFontIndexRW()
- TTF_CloseFont()
- TTF_RenderText_Solid()
- TTF_RenderUTF8_Solid()
- TTF_RenderUNICODE_Solid()
- TTF_RenderText_Shaded()
- TTF_RenderUTF8_Shaded()
- TTF_RenderUNICODE_Shaded()
- TTF_RenderText_Blended()
- TTF_RenderUTF8_Blended()
- TTF_RenderUNICODE_Blended()
- TTF_RenderGlyph_Solid()
- TTF_RenderGlyph_Shaded()
- TTF_RenderGlyph_Blended(
- TTF_SetFontStyle()
- TTF_GetFontStyle()
- TTF_SizeText()
- TTF_SizeUTF8()
- TTF_SizeUNICODE()
- TTF_FontHeight()
- TTF_FontLineSkip()
- TTF_FontAscent()
- TTF_FontDescent()
- TTF_GlyphMetrics()
- TTF_ByteSwappedUNICODE()
- TTF_FontFaceFamilyName()
- TTF_FontFaceStyleName()
- TTF_FontFaceIsFixedWidth()
- 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_IconifyWindow()
- SDL_WM_ToggleFullScreen()
- 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_SetEventFilter()
- SDL_GetEventFilter()
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_EnableKeyRepeat()
- 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_MouseButtonEvent
- Struktura SDL_MouseMotionEvent
- SDL_BUTTON()
- SDL_GetMouseState()
- SDL_GetRelativeMouseState()
- 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_JoystickOpened()
- SDL_JoystickClose()
- SDL_JoystickName()
- SDL_JoystickIndex()
- SDL_JoystickNumAxes()
- SDL_JoystickNumBalls()
- SDL_JoystickNumHats()
- SDL_JoystickNumButtons()
- SDL_JoystickEventState()
- Struktura SDL_JoyAxisEvent
- Struktura SDL_JoyButtonEvent
- Struktura SDL_JoyBallEvent
- Struktura SDL_JoyHatEvent
- SDL_JoystickUpdate()
- SDL_JoystickGetAxis()
- SDL_JoystickGetButton()
- SDL_JoystickGetBall()
- SDL_JoystickGetHat()
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_AudioDriverName()
- Struktura SDL_AudioSpec
- SDL_LockAudio()
- SDL_UnlockAudio()
- SDL_OpenAudio()
- SDL_PauseAudio()
- SDL_GetAudioStatus()
- 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_AvailableDecoders()
- Struktura Sound_DecoderInfo
- Sound_NewSample()
- Sound_NewSampleFromFile()
- Struktura Sound_AudioInfo
- Struktura Sound_Sample
- Sound_FreeSample()
- Sound_Decode()
- Sound_DecodeAll()
- Sound_SetBufferSize()
- 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_AllocateChannels()
- Mix_Volume()
- Mix_PlayChannel()
- Mix_PlayChannelTimed()
- Mix_FadeInChannel()
- Mix_FadeInChannelTimed()
- Mix_Pause()
- Mix_Resume()
- Mix_HaltChannel()
- Mix_ExpireChannel()
- Mix_FadeOutChannel()
- Mix_ChannelFinished()
- 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_FadeInMusicPos()
- Mix_HookMusic()
- Mix_GetMusicHookData()
- Mix_VolumeMusic()
- Mix_PauseMusic()
- Mix_ResumeMusic()
- Mix_RewindMusic()
- Mix_SetMusicPosition()
- Mix_SetMusicCMD()
- Mix_HaltMusic()
- Mix_FadeOutMusic()
- Mix_HookMusicFinished()
- Mix_GetMusicType()
- Mix_PlayingMusic()
- Mix_PausedMusic()
- Mix_FadingMusic()
- Mix_SetPanning()
- Mix_SetDistance()
- Mix_SetPosition()
- Mix_SetReverseStereo()
- Mix_RegisterEffect()
- Mix_UnregisterEffect()
- Mix_UnregisterAllEffects()
- Mix_SetPostMix()
- Mix_ReserveChannels()
- Mix_GroupChannel()
- Mix_GroupChannels()
- Mix_GroupCount()
- Mix_GroupAvailable()
- 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_CreateSemaphore()
- SDL_DestroySemaphore()
- SDL_SemWait()
- SDL_SemTryWait()
- SDL_SemWaitTimeout()
- SDL_SemPost()
- SDL_SemValue()
- Struktura SDL_cond
- SDL_CreateCond()
- SDL_DestroyCond()
- SDL_CondWait()
- SDL_CondWaitTimeout()
- 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_RWFromConstMem()
- SDL_AllocRW()
- SDL_FreeRW()
- Struktura SDL_RWops
- SDL_RWread()
- SDL_RWwrite()
- SDL_RWseek()
- SDL_RWtell()
- SDL_RWclose()
- Struktura SDL_Overlay
- SDL_CreateYUVOverlay()
- SDL_FreeYUVOverlay()
- SDL_LockYUVOverlay()
- SDL_UnlockYUVOverlay()
- SDL_DisplayYUVOverlay()
- 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!