Основы компьютерной графики для программистов. Казанцев А.В. - 67 стр.

UptoLike

Составители: 

Основы компьютерной графики для программистов 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