В конце работы с библиотекой все запрошенные ресурсы следует освободить, как показано в листинге 22.5.

Листинг 22.5

void DestroyGl(HWND hWnd) {
extern HGLRC hGLRC; if (hGLRC)

wglMakeCurrent(NULL. NULL); //Если передавать NULL, не будет никакого //текущего контекста воспроизведения

wglDeleteContext(hGLRC): //Освободили контекст - теперь его уничтожаем }

ReleaseDCChWnd. wglGetCurrentDCC));

//Дескриптор hDC был локальной переменной функции StartOpenGL. в данный //момент ее уже нет. Чтобы освободить контекст, определяем значение //дескриптора вызовом wglGetCurrentDCC). }

Чтобы рассмотренная выше функция RenderOC) вывела изображение на экран, необходимо учесть, что графический конвейер, используя вещественные координаты, формирует проекции вершин и отсекает их по каноническому квадрату размером 2 х 2. На экране координаты задаются целыми числами, поэтому при выводе в буфер кадра изображение кадрируется - каноническому квадрату ставится

Включение теста глубины

Рис. 22.1. Включение теста глубины

Простейшее приложение OpenGL

в соответствие область вывода на экране. Роль этой операции в формировании изображения детально рассмотрена в следующем разделе.

Кадрирование изображения в OpenGL

На вид изображения влияют координаты области вывода и координаты рабочей области окна, в которое выводится изображение. В этом разделе будут рассмотрены элементы графической системы, которые участвуют в операции кадрирования (рис. 22.2).

Выполнение кадрирования библиотекой OpenGL

Рис. 22.2. Выполнение кадрирования библиотекой OpenGL

Если задан режим двойной буферизации, то при инициализации библиотеки, кроме отображаемой на экран части видеобуфера, создается невидимый буфер такой же величины, который является поверхностью рисования. Рабочей областью видимой страницы мы будем считать прямоугольник, содержимое которого определяет картинку в рабочей области окна. Этому прямоугольнику соответствует прообраз в активной странице - такой же прямоугольник, который после формирования изображения функцией SwapBuffers() скопируется из активной страницы в рабочую область видимой страницы.


⇐ Предыдущая| |Следующая ⇒