Stap 5: De bouw: maken van een venster
The Basic-code je moet compileren en uitvoeren is als onder. Nu, het veel korter kan zijn, maar ik wil introduceren van belangrijke begrippen in deze stap en vult dit instructable in een eindige hoeveelheid tijd.
Neem een dichtere blik bij initialisatie
SDL_Init initialiseert de sdl naar een modus die u wilt gebruiken. Specifiek, zijn er 8 modi in SDL waaronder Audio, CD-ROM, bestand i/o-, Joystick Handling, Threading, gebeurtenis afhandeling, Timers, Video (degene die we gebruiken). Nu is onze behoefte op dit moment alleen de SDL_INIT_VIDEO.
De volgende drie coderegels Maak gewoon een venster voor ons om te gebruiken. scherm is een variabele van het type
SDL_Window *scherm;
In deze variabele, we slaan de geretourneerde waarde van de SDL_CreateWindow() die een venster als resultaat gegeven als succesvol of NULL als mislukte.
in SDL_CreateWindow(),
1) het eerste argument gegevens de venstertitel,
2) de tweede en derde argument geven de standaardlocatie van het venster op het scherm bij het opstarten
3) het vierde en vijfde argument geeft u de grootte van het scherm, ik heb twee variabelen windowHeight = 1020; en Vensterbreedte = 610; deze informatie op te slaan.
4) het zesde argument is voor een vlag, die dingen zoals opgeven kunt of het venster kan worden aangepast of dat het bij het opstarten enz vindt u meer vlaggen in de links onderaan deze stap moet worden geminimaliseerd.
De volgende functie SDL_CreateContext() is uniek voor elk venster. SDL2 een nieuw systeem ingevoerd waarmee u meerdere vensters kunt maken. maar voor elk venster, moet u een kader waarin alle van de staat die hoort bij dit exemplaar van OpenGL in principe worden opgeslagen.
Zoals ik voordien zei, OpenGL is een statusmachine. Onze applicatie wellicht meerdere vensters, zodat openGL welk venster te renderen van de graphics, weten moet dus we gebruiken
SDL_GL_MakeCurrent (, )
om te vertellen openGL welk venster te renderen aan. OpenGL zullen blijven geven aan een bepaald Stel venster totdat u opnieuw huidige SDL_GL_Make als u een ander venster wilt gebruiken.
Vervolgens laten we een kijkje nemen op de while() -lus
Ik heb gemaakt een variabele = 0; dat de lus wordt gecontroleerd bij elke iteratie. Indien = 1, het programma heeft voldaan uitgangsvoorwaarde en de lus zal beëindigen en het programma zal sluiten.
SDL_Event evenement creëert een soort van een stapel van verschillende evenementen die zijn gesorteerd op de volgorde van vóórkomen. Bij elke nieuwe iteratie, de status van de toepassing zal worden bijgewerkt en in elke iteratie van de lus, de gebruiker kan toetsen, klik op knoppen of Beweeg de muis enz.
SDL_PollEvent (& gebeurtenis); zal bevolken gebeurtenis met de verschillende gebeurtenissen die zich in elke iteratie.
dat wil zeggen, in elke iteratie van de while lus, de variabele evenement zal worden opnieuw gevuld met gebeurtenisgegevens over en weer.
door het plaatsen van SDL_PollEvent (& gebeurtenis); in een tijdje lus
terwijl (SDL_PollEvent (& gebeurtenis))
{
}
We kunnen gebeurtenissen uit de stack van de gebeurtenis in de gebeurtenis variabele evalueren totdat er zijn geen meer evenementen in de gebeurtenis variabele.
in het geneste while lus, controleren wij voor SDL_QUIT gebeurtenis die eigenlijk ons het Rode Kruis knoop op de bovenkant van de toepassing vertelt is ingedrukt en de gebruiker is nu om de toepassing te sluiten.
De allerlaatste functie is SDL_GL_SwapWindow(screen).
Nu wordt alles naar het scherm in OpenGL gerenderd opgeslagen in een geheugengebied genaamd de framebuffer. Wanneer het scherm met een nieuw image bij elk frame te vernieuwen, zijn de inhoud van het frame buffers gewist en gevuld met de nieuwe graphics. praktisch dit proces kost tijd en als we onze applicatie lopen deze manier zouden we zien een heleboel flikkering als het tekenen van de nieuwe afbeelding duurt in de framebuffer.
Maar met het concept van het wisselen van het geheugen, kunnen we voorkomen dat dit effect. Wij definiëren twee geheugengebieden, de voorste buffer en de rug buffer, het scherm wijst naar de voorste buffer en de afbeelding in de voorste buffer wordt weergegeven. De volgende afbeelding worden getrokken is in de rug buffer geladen, terwijl het scherm de inhoud van de voorste buffer, toont zodat in plaats van het kopiëren van de inhoud van de achterkant van de buffer aan de voorste buffer, het scherm wijst aan de achterkant buffer in plaats daarvan het volgende frame wordt getekend als een direct, en de voorste buffer is gevuld met het volgende frame en het scherm wordt gewijzigd, weer, enzovoort. Kortom, we definiëren naar geheugenlocaties en laden gegevens in hen in tandem d.w.z. de afbeelding moet worden weergegeven en de volgende afbeelding worden weergegeven en de aanwijzer scherm tussen de twee houden wisselen.
Gelukkig in OpenGL hoeven we te gaan die veel complexiteit en slechts één functie aanroepen om te bereiken een mooi display en voorkomen dat flikkert:
SDL_GL_SwapWindow ();
Het laatste ding om te doen is het sluiten van de toepassing en verwijdering van alle middelen die we hebben gebruikt.
Externe Links en referenties voor verder onderzoek:
SDL_Init()- https://www.libsdl.org/release/SDL-1.2.15/docs/htm...
SDL_CreateWindow()- https://wiki.libsdl.org/SDL_CreateWindow
SDL_GL_MakeCurrent()- https://wiki.libsdl.org/SDL_GL_MakeCurrent
SDL_PollEvent()- https://wiki.libsdl.org/SDL_PollEvent