ВУЗ:
Составители:
Основы компьютерной графики для программистов 67
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
BYTE cBlueShift;
BYTE cAlphaBits;
BYTE cAlphaShift;
BYTE cAccumBits;
BYTE cAccumRedBits;
BYTE cAccumGreenBits;
BYTE cAccumBlueBits;
BYTE cAccumAlphaBits;
BYTE cDepthBits;//битов элемент глубины в z-буфере
BYTE cStencilBits;
BYTE cAuxBuffers;
BYTE iLayerType;//для этой версии всегда PFD_MAIN_PLANE
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR;
Для выбора требуемого формата пиксела необходимо заполнить наиболее важные поля
записи и сделать запрос к OpenGL. Если система в состоянии работать с заданным
форматом, то результат вызова функции ChoosePixelFormat(hdc,@pfd) будет
ненулевым.
Для установки формата пиксела, который наиболее близок к тому, который установлен
в операционной системе, достаточно обнулить все поля записи, и вызвать
ChoosePixelFormat, предварительно указав в поле pfd.nSize размер самой записи в
байтах. В качестве единственного требования указываем на необходимость двойной
буферизации графического вывода:
pfd.dwFlags:=PFD_DOUBLEBUFFER. При этом
изображение будет строиться на невидимой области, а затем полностью выводиться на
экран. Это гарантирует нам отсутствие мерцания изображения при смене кадров.
При успешном получении номера формата пикселов устанавливаем его:
SetPixelFormat(hdc,nPixelFormat,@pfd).
Далее, на основе контекста устройства и формата пикселов создаем контекст
воспроизведения OpenGL:
RContext := wglCreateContext(hdc);
и устанавливаем его текущим:
wglMakeCurrent(hdc,RContext).
Для завершения работы с OpenGL требуется освободить текущий контекст устройства:
wglMakeCurrent(0, 0) ,
и затем удалить его:
wglDeleteContext(RContext).
Как видим, с помощью функции wglMakeCurrent можно не только устанавливать
текущий контекст воспроизведения, но и освобождать его. Рассмотрим определение
этой функции:
BOOL wglMakeCurrent(
HDC hdc, //Контекст устройства на который осуществляется вывод графики
HGLRC hglrc //Контекст воспроизведения OpenGL для текущего потока
Основы компьютерной графики для программистов 67 ____________________________________________________________________________________________________________________ BYTE cBlueShift; BYTE cAlphaBits; BYTE cAlphaShift; BYTE cAccumBits; BYTE cAccumRedBits; BYTE cAccumGreenBits; BYTE cAccumBlueBits; BYTE cAccumAlphaBits; BYTE cDepthBits;//битов элемент глубины в z-буфере BYTE cStencilBits; BYTE cAuxBuffers; BYTE iLayerType;//для этой версии всегда PFD_MAIN_PLANE BYTE bReserved; DWORD dwLayerMask; DWORD dwVisibleMask; DWORD dwDamageMask; } PIXELFORMATDESCRIPTOR; Для выбора требуемого формата пиксела необходимо заполнить наиболее важные поля записи и сделать запрос к OpenGL. Если система в состоянии работать с заданным форматом, то результат вызова функции ChoosePixelFormat(hdc,@pfd) будет ненулевым. Для установки формата пиксела, который наиболее близок к тому, который установлен в операционной системе, достаточно обнулить все поля записи, и вызвать ChoosePixelFormat, предварительно указав в поле pfd.nSize размер самой записи в байтах. В качестве единственного требования указываем на необходимость двойной буферизации графического вывода: pfd.dwFlags:=PFD_DOUBLEBUFFER. При этом изображение будет строиться на невидимой области, а затем полностью выводиться на экран. Это гарантирует нам отсутствие мерцания изображения при смене кадров. При успешном получении номера формата пикселов устанавливаем его: SetPixelFormat(hdc,nPixelFormat,@pfd). Далее, на основе контекста устройства и формата пикселов создаем контекст воспроизведения OpenGL: RContext := wglCreateContext(hdc); и устанавливаем его текущим: wglMakeCurrent(hdc,RContext). Для завершения работы с OpenGL требуется освободить текущий контекст устройства: wglMakeCurrent(0, 0) , и затем удалить его: wglDeleteContext(RContext). Как видим, с помощью функции wglMakeCurrent можно не только устанавливать текущий контекст воспроизведения, но и освобождать его. Рассмотрим определение этой функции: BOOL wglMakeCurrent( HDC hdc, //Контекст устройства на который осуществляется вывод графики HGLRC hglrc //Контекст воспроизведения OpenGL для текущего потока http://www.ksu.ru/persons/9134.ru.html
Страницы
- « первая
- ‹ предыдущая
- …
- 65
- 66
- 67
- 68
- 69
- …
- следующая ›
- последняя »