Учебник по Visual C++ .Net



Подготовка окна Вы помните, что


CView::PreCreateWindow(cs);

}

Вы помните, что окно OpenGL не должно позволять Windows стирать свой фон, так как данная операция сильно тормозит работу конвейера. В связи с этим введите в функцию обработки WM_ERASEBKGND код, сообщающий системе, что сообщение уже обработано:

BOOL COGView::OnEraseBkgnd(CDC* pDC)

{

return TRUE;

}

Окно OpenGL имеет свой собственный формат пикселов. Нам следует выбрать и установить подходящий формат экранной поверхности в контексте устройства HDC, а затем создать контекст передачи изображения (HGLRC). Для описания формата пикселов экранной поверхности используется структура PIXELFORMATDESCRIPTOR. Выбор формата зависит от возможностей карты и намерений разработчика. Мы зададим в полях этой структуры такие настройки:

  • глубину цвета — 24;

  • тип буферизации — двойной;

  • схему образования цвета RGBA;

  • количество бит для буфера глубины — 32;

  • поддержку регулировки прозрачностью и другие специфические настройки выключим.

    В функцию OnCreate введите код подготовки окна OpenGL. Работа здесь ведется со структурой PIXELFORMATDESCRIPTOR. Кроме того, в ней создается контекст m_hRC и устанавливается в качестве текущего:

    int COGView::OnCreate(LPCREATESTROCT IpCreateStruct)

    {

    if (CView::OnCreate(IpCreateStruct) == -1)

    return -1;

    PIXELFORMATDESCRIPTOR pfd = // Описатель формата

    {

    sizeof(PIXELFORMATDESCRIPTOR), // Размер структуры

    1, // Номер версии

    PFD_DRAW_TO_WINDOW | // Поддержка GDI

    PFD_SUPPORT_OPENGL | // Поддержка OpenGL

    PFD_DOUBLEBUFFER, // Двойная буферизация

    PFD_TYPE_RGBA, // Формат RGBA, не палитра

    24, // Количество плоскостей

    //в каждом буфере цвета

    24, 0, // Для компонента Red

    24, 0, // Для компонента Green

    24, 0, // Для компонента Blue

    24, 0, // Для компонента Alpha

    0, // Количество плоскостей

    // буфера Accumulation

    0, // То же для компонента Red

    0, // для компонента Green

    0, // для компонента Blue

    0, // для компонента Alpha

    32, // Глубина 2-буфера

    0, // Глубина буфера Stencil




    Содержание  Назад  Вперед