Unit GLWinModes

DescriptionUsesClasses, Interfaces, Objects and RecordsFunctions and ProceduresTypesConstantsVariables

Description

Unit with utilities to easily save/restore TGLWindow attributes along with OpenGL state. This is useful to create routines that work like "modal windows" in programs that use GLWindow unit.

This unit is a tool for creating functions like GLWinMessages.MessageOK. Such functions want to temporarily replace TGLWindow callbacks with their own, then call glwm.ProcessMessage method in a loop and then return, restoring GLWindow callbacks and OpenGL state back into the original state. This way you can implement functions that e.g. wait for some keypress, or wait until user inputs some string, or wait until user picks something with mouse, or wait for 10 seconds displaying some animation, etc. Such functions can implement things like "modal boxes" known from many GUI toolkits.

In such situations it's crucial to reliably do operations "save the state of some things" and "restore state of some things". OpenGL has routines gl(Push|Pop)(Matrix|Attrib) for exactly such work, and this unit provides such routines for saving and restoring attributes of TGLWindow object. Also it provides routines to set in one call all attributes of TGLWindow object that can be saved/restored. Finally it provides TGLMode class that somehow merges saving/restoring of TGLWindow attributes and OpenGL state. Also some sample generally useful descendant of TGLMode is provided: TGLModeFrozenScreen.

Pl: Nasz pomysl ma duzo szersze zastosowanie, nie chodzi nam o okienka ale o cokolwiek zwiazanego z konstrukcja procedur ktore w "punkcie kulminacyjnym" wykonuja petle w rodzaju while not <warunek-konca> do glwm.ProcessMessage; lub while (not <warunek-konca>) and glwm.ProcessMessage do ; (druga wersja dopuszcza fakt ze user moze zamknac okienko w czasie trwania procedury; zazwyczaj procedury w rodzaju MessageOK beda blokowac mozliwosc zamkniecia programu na czas swojego dzialania (moga to zrobic prosto ustawiajac odpowiednie OnCloseQuery))

Uses

Overview

Classes, Interfaces, Objects and Records

Name Description
record TGLWindowState  
Class TGLMode  
Class TGLModeFrozenScreen  

Functions and Procedures

function GetGLWindowState(glwin: TGLWindow): TGLWindowState;
procedure SetGLWindowState(glwin: TGLWindow; const State: TGLWindowState);
procedure SetStandardGLWindowState(glwin: TGLWindow; NewDraw, NewCloseQuery, NewResize: TGLWindowFunc; NewUserData: Pointer; NewAutoRedisplay: boolean; NewFPSActive: boolean; NewMainMenuEnabled: boolean; NewSwapFullScreen_Key: TKey; NewClose_charkey: char; NewFpsShowOnCaption, NewUseNavigator: boolean);
procedure SetStdNoCloseGLWindowState(glwin: TGLWindow; NewDraw, NewResize: TGLWindowFunc; NewUserData: Pointer; NewAutoRedisplay: boolean; NewFPSActive: boolean; NewMainMenuEnabled: boolean; NewSwapFullScreen_Key: TKey; NewFpsShowOnCaption, NewUseNavigator: boolean);

Description

Functions and Procedures

function GetGLWindowState(glwin: TGLWindow): TGLWindowState;

Get/Set sejwuja / ustawiaja wszystkie wlasciwosci okienka TGLWindow ktore moga sie zmieniac w czasie gdy okienko pozostaje not Closed. Te wlasciwosci sa zapamietywane w strukturze TGLWindowState. W ten sposob mozesz za pomoca Get/Set robic cos jak Push/Pop stanu wlasciwosci TGLWindow, mozesz tez robic w ten sposob kopiowanie wlasciwosci z jednego okienka do drugiego.

Notka: pamietaj ze tylko referencja wartosci MainMenu jest kopiowana. Wiec 1. nie mozesz robic tak po prostu kopiowania wartosci MainMenu z jednego okienka do drugiego (zeby jej pozniej dwa razy nie robic Free), o ile jest ona <> nil. 2. Nie mozesz zmieniac zawartosci MainMenu w czasie TGLMode.Create/Free. (chociaz mozesz podmieniac wartosc MainMenu na inna, pod warunkiem ze obie sa <> nil). Wyjatkiem jest tutaj MainMenu.Enabled, ktore jest tutaj zapamietywane specjalnie.

Note that SetGLWindowState first sets Glwin.MainMenu, and then, if Glwin.MainMenu <> nil, sets Glwin.MainMenu.Enabled from saved state.

procedure SetGLWindowState(glwin: TGLWindow; const State: TGLWindowState);
 
procedure SetStandardGLWindowState(glwin: TGLWindow; NewDraw, NewCloseQuery, NewResize: TGLWindowFunc; NewUserData: Pointer; NewAutoRedisplay: boolean; NewFPSActive: boolean; NewMainMenuEnabled: boolean; NewSwapFullScreen_Key: TKey; NewClose_charkey: char; NewFpsShowOnCaption, NewUseNavigator: boolean);

SetStandardGLWindowState ustawia wszystkie wlasciwosci ktore sa zawarte w TGLWindowState. Ale pozwala w wygodniejszy sposob niz SetGLWindowState podac te wlasciwosci : czesc wlasciwosci jest pobierana jako parametry, czesc wlasciwosci jest pominieta - pominiete callbacki beda ustawione na nil, pominiete Caption i MainMenu bedzie zostawione takie jakie jest, pominiete Cursor bedzie ustawione na gcDefault. Note that NewMainMenuEnabled will be set only if Glwin.MainMenu <> nil.

procedure SetStdNoCloseGLWindowState(glwin: TGLWindow; NewDraw, NewResize: TGLWindowFunc; NewUserData: Pointer; NewAutoRedisplay: boolean; NewFPSActive: boolean; NewMainMenuEnabled: boolean; NewSwapFullScreen_Key: TKey; NewFpsShowOnCaption, NewUseNavigator: boolean);

SetStdNoCloseGLWindowState dziala jak SetStandardGLWindowState ale ustawia zawsze oldClose_charkey na #0 i NewCloseQuery na procedure bez zadnego kodu : begin end; W ten sposob uniemozliwia userowi zamkniecie okienka metodami WindowManagera lub dawanymi przez klase TGLWindowDemo.


Generated by PasDoc 0.11.0 on 2008-09-12 11:58:25