[ Pobierz całość w formacie PDF ]
.116 ____ ____ ____ ___ ____ Czêœæ l •» Wprowadzenie do OpenGLBrakuj¹cy kod obs³ugi paletyGdy porównasz zamieszczony w ksi¹¿ce kod programu GLRECT z ko­dem programu nado³¹czonej do ksi¹¿ki p³ytce CD-ROM, w tym drugim zauwa¿ysz procedury obs³ugidwóch dodatkowych komunikatów.Te dwa komunikaty: WM_QUERYPALETTE iWM_PALETTECHANGED ob­s³uguj¹ odwzorowanie palety Windows.Kolejna funkcja,GetOpenGL-Palette, tworzy dla nas paletê kolorów.Palety s¹ z³em koniecznym,jeœli mamy zamiar korzystaæ z kart graficznych potrafi¹cych wyœwietliæmaksymalnie 256 kolorów.Bez tego kodu moglibyœmy nie otrzymaæ ko­lorów o którepoprosilibyœmy funkcj¹ glColor, zaœ w przypadku pewnych kolorów, nieotrzymalibyœmy nawet ich przybli¿enia.Palety i kolory w Windows stanowi¹ wa¿nytemat, którym zajmiemy siê szczegó³owo w rozdziale 8.To kolejne irytuj¹cezagadnienie, którego roztrz¹sania stara³a siê nam oszczêdziæ biblioteka AUX!PodsumowaniePo przeczytaniu tego rozdzia³u powinieneœ zdawaæ sobie sprawê, o iluuci¹¿liwych szczegó³ach nie musimy pamiêtaæ korzystaj¹c z biblioteki AUX.Pozna³eœ koncepcjê kontekstów renderowania, wprowadzon¹ do Windows GDI po to,aby OpenGL wie­dzia³o, w którym oknie ma wykonywaæ operacje graficzne.Wieszju¿, jak wybór i usta­wienie formatu pikseli przygotowuje kontekst urz¹dzeniaprzed wykorzystaniem go do stworzenia kontekstu renderowania.Oprócz tegodowiedzia³eœ siê, na które komunikaty okienkowe i w jaki sposób powinienodpowiadaæ program OpenGL w Windows.W poni¿szej sekcji podrêcznika znajdziesz usystematyzowane informacje ofunkcjach opi­sywanych w tym rozdziale oraz dodatkowe informacje o funkcjachjeszcze nie omawia­nych, gdy¿ to wymaga³oby poznania pewnych zagadnieñ ikoncepcji, które jeszcze nie by³y poruszane.Przyk³ady zastosowania tychfunkcji znajdziesz na p³ytce CD-ROM do³¹­czonej do ksi¹¿ki.Zachêcamy dosamodzielnej analizy i modyfikowania tych przyk³adów.PodrêcznikChoosePixel FormatPrzeznaczenie Wybiera format pikseli najbardziej zbli¿ony do formatu za¿¹danegow strukturze PIXELFORMATDESCRIPTOR, dostêpny dla danegokontekstu urz¹dzenia.Plik nag³Ã³wkowy117Rozdzia³ 4.* OpenGL for Windows: OpenGL + Win32 = WiggleSk³adnia Opisint ChoosePixelFormat(HDC hDC, const PIXELFORMATDESCRIPTOR *ppfd);Ta funkcja jest u¿ywana do wyznaczenia najlepszego formatu pikseli dostêpnegodla danego kontekstu urz¹dzenia.Wybór opiera siê na charakterystyceprzekazanej w strukturze PIXELFORMATDESCRIPTOR.Otrzymany indeks formatu jestprzekazywany funkcji SetPixelFormat.Parametry hDCPPfdZwracana wartoœæPrzyk³adHDC: Uchwyt kontekstu urz¹dzenia, dla którego funkcja wyszukuje najbardziejdopasowany format pikseli.PDCELFORMATDESCRIPTOR: WskaŸnik do struktury opisuj¹cej idealny ¿¹dany formatpikseli.Niektóre pola struktury s¹ zarezerwowane do wykorzystania wprzysz³oœci.Pe³ny opis struktury PIXELFORMATDESCRIPTOR zostanie podany przyopisie funkcji DescribePixelFormat.Tutaj opiszemy jedynie te pola, które s¹wykorzystywane przy wyborze formatu pikseli:nSize WORD: Rozmiar struktury, zwykle ustawiany nasizeof(PIXELFORMATDESCRIPTOR).nYersion WORD: Numer wersji struktury, ustawiany na 1.dwFlag DWORD: Zestaw znaczników okreœlaj¹cych w³aœciwoœci bufora pikseli.iPixelType BYTE: Tryb kolorów (RGBA lub indeksowany).cColorBits BYTE:G³êbokoœæ bufora kolorów.cAlphaBits BYTE: G³êbokoœæ bufora alfa.cAccumBitsBYTE: G³êbokoœæ bufora akumulacji.cDepthBits BYTE: G³êbokoœæ buforag³êbokoœci.cStencilBits BYTE: G³êbokoœæ bufora szablonu.cAuxBuffers BYTE: Iloœæ buforów pomocniczych (nieobs³ugiwane w implementacjiMicrosoftu).iLayerType BYTE: Rodzaj warstwy (nieobs³ugiwane w implementacji Microsoftu).Indeks formatu pikseli najbardziej zbli¿onego do przekazanego formatu lubwartoœæ zero, jeœli nie powiod³o siê wyszukanie zbli¿onego formatu.Kod przyk³adu GLRECT w tym rozdziale demonstruje wybór formatu pikseli:int nPixelFormat;static PIKELFORMATDESCRIPTOR pfd = {sizeof(PIXELFORMATDESCRIPTOR),// Rozmiar tejstrukturyl, // Wersja struktury118Czêœæ l * Wprowadzenie do OpenGLPatrz tak¿e// Wybranie formatu pikseli najbardziej zbli¿onego// do wskazanego w pfdnPixelFormat = ChoosePixelFormat(hDC, &pfd);// Ustawienie formatu pikseli dla kontekstu urz¹dzenia SetPixelFormat(hDC,nPixelFormat, &pfd);DescribePixelFormat, GetPixelFormat, SetPixelFormatDescribePixelFormatPrzeznaczenie Plik nag³Ã³wkowy Sk³adniaOpisZwraca szczegó³owe informacje o formacie pikseli.int DescribePixelFormat(HDC hDC, int iPixelFormat, UINT nBytes,LPPIXELFORMATDESCRIPTOR ppfd);Ta funkcja wype³nia strukturê PIXELFORMATDESCRIPTOR informacjami o formaciepikseli okreœlonym dla danego kontekstu urz¹dzenia.Zwraca tak¿e maksymalnyindeks formatu pikseli dla danego kontekstu urz¹dzenia.Jeœli ppfd ma wartoœæNULL, funkcja i tak zwraca maksymalny numer indeksu formatu pikseli dla danegokontekstu urz¹dzenia.Niektóre pola struktury PIXELFORMATDESCRIPTOR nie s¹obs³ugiwane w ogólnej implementacji OpenGL Microsoftu, mog¹ jednak byæobs³ugiwane przez poszczególnych producentów sprzêtu.Parametry hDCtPixelFormat nBytesppfdHDC: Uchwyt kontekstu urz¹dzenia zawieraj¹cego formaty pikseli.int: Indeksformatu pikseli, o którym chcemy otrzymaæ informacje.UINT: Rozmiar struktury wskazywanej przez ppfd.Jeœli ten parametr ma wartoœæzero, dane nie bêd¹ kopiowane do bufora.Powinien byæ ustawiony nasizeof(PIXELFORMATDESCRIPTOR).LPPIXELFORMATDESCRIPTOR: WskaŸnik do struktury PIXELFORMATDESCRIPTOR, którazostanie wype³niona szczegó³owymi informacjami o danym formacie pikseli.Struktura PIXELFORMATDESCRIPTOR jest zdefiniowana nastêpuj¹co:typedef struct tagPIKELFORMATDESCRIPTOR { // pfd WORD nSize; WORD nVersion;DWORD dwFlags; BYTE iPixelType; BYTE cColorBits; BYTE cRedBits; BYTE cRedShift;BYTE cGreenBits; BYTE cGreenShift;Rozdzia³ 4.» OpenGL for Windows: OpenGL + Win32 = Wiggle_________________119BYTE CBlueBits; BYTE cBlueShift; BYTE cAlphaBits; BYTE cAlphaShift; BYTEcAccumBits; BYTE cAccumRedBits; BYTE cAccumGreenBits; BYTE cAccumBlueBits; BYTEcAccumAlphaBits; BYTE cDepthBits; BYTE cStencilBits; BYTE cAuxBuffers; BYTEiLayerType; BYTE bReserved; DWORD dwLayerMask; DWORD dwVisibleMask; DWORDdwDamageMask; } PIXELFORMATDESCRIPTOR;nSize Zawiera rozmiar struktury.Zawsze powinno byæ ustawione nasizeof(PIXELFORMATDESCRIPTOR).nYersion Zawiera numer wersji struktury.Zawsze powinno byæ ustawione na l.dwFlags zawiera zestaw znaczników bitowych (tabela 4.2) opisuj¹cych w³aœciwoœciformatu pikseli.Z pewnymi wyj¹tkami, te znaczniki nie wykluczaj¹ siêwzajemnie [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • orla.opx.pl