mirror of
https://github.com/Relintai/programming_tutorials.git
synced 2025-04-21 21:51:22 +02:00
116 lines
5.0 KiB
Plaintext
116 lines
5.0 KiB
Plaintext
|
|
Először nézzük meg, hogy hogy is működik az SDL2.
|
|
|
|
--------------------------------------------------------------------------------------------------------
|
|
|
|
Fontos tudni, hogy ez egy C könyvtár, ami úgy van megcisnálva, hogy működjön c++-al is!
|
|
Azaz: Csak structok vannak, és ezekbe nincsenek függvények!
|
|
|
|
Szóval sok olyan függvénnyel fogunk találkozni:
|
|
|
|
SDL_Renderer* r = SDL_CreateRenderer(...)
|
|
|
|
SDL_GetRendererOutputSize(r, ...)
|
|
SDL_CreateTexture(r, ...)
|
|
|
|
etc...
|
|
|
|
Úgy érdemes erre gondolni, mitnha a this* paramétert, ami c++-ban eléhető minden osztály
|
|
tagfüggvényben, itt az első paraméterként adjuk be.
|
|
|
|
--------------------------------------------------------------------------------------------------------
|
|
|
|
Az SDL egy relatíve szimpla könytár, gyakolratilag nem sokkal több, mint sok platform
|
|
fölötti absztrakciós réteg.
|
|
|
|
Pl.: Minden platformon máshogy kell ablakot létrehozni, ablakra rajzolni, hangokat lejátszani,
|
|
bementete kezelni, fájlokat megynitni, stb. Az SDL gyakorlatilag csak ezeket csinálja meg nekünk,
|
|
egy egyesített interface-en keresztül.
|
|
|
|
Elérhető benne egy software-es, és hardware-es renderer. A hardware-es rajzoló az jelenleg az OpenGL,
|
|
vagy a Vulkan lehet.
|
|
|
|
A különbség közöttük:
|
|
|
|
A software-es renderer a CPUt használva állítgatja be / számolgatja ki egy ablak pixeleinek értékét,
|
|
míg a hardware-es renderer a GPUt használva csinálja ugyanezt.
|
|
|
|
Fontos tudni, hogy a software-es renderert jóval egyszerűbb használni / először beállítani,
|
|
mint a hardware-est. (Nem annyival nehezebb, de sok plussz kódot, és magyarázatot igényel,
|
|
inkább a szokatlansága miatt.) Ugyanis a gpu úgy működik, hogy mindent az ő általa egyszerűen
|
|
értelmezhető formátumba kell konvertálni, illetve külön manage-elni kell az egyéb dolgokat,
|
|
pl. a képeket fel kell neki tölteni.
|
|
|
|
Viszont! A GPUkban több száz mag található, míg a cpukban általában csak 4-5!
|
|
Természetesen a hátránya a GPUs magoknak, hogy nagyon szimplák!
|
|
|
|
De a lényeg az, hogy a softwares rajzolóknak az általános problémája, ha sok pixelt kell feldolgozniuk
|
|
nagyon gyorsan. Jóval kisebb az ilyen kimeneti teljesítményük. Hogy mennyi pixelt képesek feldolgozni,
|
|
az természetesen sokmindentől függ, én sajnos nem tudok erre pontos számokat. A lényeg, hogy tudjatok róla.
|
|
|
|
Ettől függetlenül azért a softwares renderereknek van előnye, sőt képesek elég jó dolgokra is!
|
|
(Pl Quake, DOOM, Duke Nukem 3D, WolfEinstein 3D, etc... mind softwares renderereket használtak! Érdemes utánanézni,
|
|
hogy hogy működtek, vannak már róluk videók is a youtube-on.)
|
|
|
|
Egyenlőre csak a software-est fogjuk használni.
|
|
|
|
(Lehet, hogy majd egyszer a hardware-es renderert is belerakom. Majd kiderül.)
|
|
|
|
Szóval: először a cél az, hogy az egyszerűbb felhasználás érdekében építsünk osztályokat az SDL2
|
|
C API-ja köré.
|
|
|
|
--------------------------------------------------------------------------------------------------------
|
|
|
|
==== Egy kis bevezető: ====
|
|
|
|
Elég csak az SDL.h-t includeolni a projektben! Így:
|
|
#include <SDL.h>
|
|
|
|
---- Rajzolás: ----
|
|
|
|
A legfőbb osztályok:
|
|
|
|
SDL_Window: //SDL_render.h ban lehet megnézni a függvényeket
|
|
|
|
Az ablak adatainak mutatója. Minden platformon más lessz kicsit mögötte.
|
|
Amikor létrehozatjuk, akkor hozatja létre az sdl maga az ablakot az operációs rendszerrel.
|
|
Az ablak módosításához van rá szükség. Pl át lehet nevezni, meg ilyenek.
|
|
|
|
SDL_Renderer: //SDL_render.h ban lehet megnézni a függvényeket
|
|
|
|
Az ablak mögötti rajzoló oszály mutatója. Lehet softwares, és hardwares is.
|
|
Rajzoláshoz van rá szükség.
|
|
Fontos tudni, hogy a softwares, és a hardwares renderert máshogy kell használni, szóval
|
|
sajnos nem triviális váltani közöttük!
|
|
|
|
SDL_Surface: //SDL_surface.h, SDL_image.h ban lehet megnézni a függvényeket
|
|
|
|
Egy képnek az adatait tartalmazza. Sokféle belső formátumot képes kezelni.
|
|
|
|
SDL_Texture: //SDL_render.h ban lehet megnézni a függvényeket
|
|
|
|
Ugyanúgy, mint egy SDL_Surface, egy kép adatait tartalmazza, viszont ez a softwares rajzoláshoz
|
|
optimalizált formában.
|
|
|
|
---- Bemenet: ----
|
|
|
|
SDL_Event: //SDL_event.h ban lehet megnézni a függvényeket
|
|
|
|
Egy struct, ami egy bemenet adatait tartalmazza.
|
|
Nagyon sok adattagja van, bármilyen eventet le tud tárolni.
|
|
|
|
A bemenetek guis appoknál úgy működnek, hogy amikor a felhasználó valamit csinál,
|
|
pl megmozdítja az egeret, vagy lenyom egy billentyűt, akkor az eltárolódik, egy queue-ban,
|
|
és nekünk (a számunkra megfelelő helyen a programunkban) ki kell kéregetnünk ezeket az eventeket,
|
|
és fel kell őket dolgoznunk.
|
|
|
|
Azaz, ha megmozdítjuk az egeret, akkor:
|
|
SDL_event type mezője SDL_MOUSEMOTION lesz, és az adatokat el fogjuk tuni érni a motion mezőben.
|
|
|
|
---- Egyéb: ----
|
|
|
|
Audio, fájlok, etc, ugyan így működnek, nézzetek körbe a headerekben, illetve az SDL wiki jén, ha
|
|
használni szeretnétek őket, nem fogunk rájuk kitérni.
|
|
|
|
(Legalábbis egyenlőre biztosan nem, talán majd egyszer.)
|