Иллюстрированный самоучитель по Visual Studio.Net

         

Подготовка окна


Подготовку контекста передачи OpenGL надо рассматривать как некий обязательный ритуал, в котором порядок действий давно определен и без которого нельзя начинать творческую работу по созданию сцены OpenGL. Стоит где-то промахнуться, и вы увидите молчаливый белый экран. Сначала надо подготовить окно так, чтобы вызовы функций OpenGL начали работать. В этой процедуре выделяют следующие шаги:

  • установка стиля окна;

  • обработка сообщения WM_ERASEBACKGROUND и отказ от стирания фона;

  • установка pixel-формата;

  • создание контекста устройства (НОС) и контекста передачи (HGLRC);

  • специфическая обработка сообщения WM_SIZE;

  • обработка сообщения WM_PAINT;

  • освобождение контекстов при закрытии окна.
  • Чтобы использовать функции библиотеки OpenGL в вашем приложении, надо убедиться, что в системном каталоге Windows присутствуют модули OpenGL32.dll и GLU32.dll. Они должны быть там, так как компания Silicon Graphics (авторы пакета OpenGL) постаралась, чтобы поддержка OpenGL на платформе Windows была максимально доступна и достаточно надежна. Однако хочу предупредить, что я встречал системы, в которых контекст передачи (rendering context) OpenGL работает ненадежно — появляются пятна пробелов и задержка перерисовки, если работа идет не в полноэкранном режиме. Если это есть, то должно проявляться при запуске любой программы, использующей OpenGL. Причина, видимо, в драйвере видеопамяти.

    Типы данных

    OpenGL использует свои собственные типы данных, которые должны соответствовать аналогичным типам той платформы, на которой библиотека установлена. В Microsoft-реализации соответствие типов задано в файле заголовков GL.H так, как показано ниже. Эта таблица понадобится вам при анализе примеров и при разработке собственного кода:

    typedef unsigned int GLenum;

    typedef unsigned char GLboolean;

    typedef unsigned int GLbitfield;

    typedef signed char GLbyte;

    typedef short GLshort;

    typedef int GLint;

    typedef int GLsizei;

    typedef unsigned char GLubyte;

    typedef unsigned short GLushort;

    typedef unsigned int GLuint;

    typedef float GLfloat;

    typedef float GLclampf;

    typedef double GLdouble;

    typedef double GLclampd;

    typedef void GLvoid;



    Содержание раздела