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


Подготовка окна - часть 2


Работа здесь ведется со структурой 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

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

0, // Теперь игнорируется

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

0, // Теперь игнорируется

0, // Цвет прозрачной маски

0 // Теперь игнорируется };

//====== Добываем дежурный контекст

m_hdc = ::GetDC(GetSafeHwnd());

//====== Просим выбрать ближайший совместимый формат

int iD = ChoosePixelForraat(m_hdc, spfd);

if ( !iD )

{

MessageBoxC'ChoosePixelFormat: :Error") ;

return -1;

}

//====== Пытаемся установить этот формат

if ( ISetPixelFormat (m_hdc, iD, Spfd) )

{

MessageBox("SetPixelFormat::Error");

return -1;

}

//====== Пытаемся создать контекст передачи OpenGL

if ( !(m_hRC = wglCreateContext (m_hdc)))

{

MessageBox("wglCreateContext::Error");

return -1;

}

//====== Пытаемся выбрать его в качестве текущего

if ( IwglMakeCurrent (m_hdc, m_hRC))

{

MessageBox("wglMakeCurrent::Error");

return -1;

//====== Теперь можно посылать команды OpenGL

glEnable(GL_LIGHTING); // Будет освещение

//====== Будет только один источник света



Начало  Назад  Вперед