ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX


Интерфейс DirectDraw - часть 16


// Получить DC для вторичного буфера CDC* pdc = pBB-»GetDC() ;

ASSERT(pdc) ;

// Заполнить буфер белым цветом pdc-»PatBlt (rcBack.left,

rcBack.top,

rcBack.right — rcBack.left,

rcBack.bottom — rcBack.top,

WHITENESS) ;

// Вывести текст pdc-»DrawText (buf,

-1,

srcBack,

DT_CENTER ¦ DT_BOTTOM I DT_SINGLELINE) ;

/b> в¦1' Глава 12. Интеофейс DirectDraw

// Освободить DC pBB-»ReleaseDC(pdc) ;

// Переключить буфера

if (m_pTI-»bFullScreen) { pFB-»Flip() ;

} else (

pFB-»Blt (SrcFront, pBB, SrcBack) ;

} } )

Тестирование начинается с получения указателей на первичный и вторичный буфера и подготовки прямоугольника, описывающего их. Обратите внимание на то, что размер прямоугольника первичного буфера зависит от того, в каком режиме проводится тестирование — в полноэкранном или оконном. В оконном режиме поверхность первичного буфера используется совместно с другими приложениями, работающими в системе.

Каждый цикл тестирования в функции TestGDIText состоит из следующих этапов:

1. Определить текущее время и вычислить текущую скорость вывода.

2. Создать выводимый текст.

3. Получить контекст устройства для вторичного буфера.

4. Стереть весь вторичный буфер, заполняя его белым цветом с помощью функции GDI.

5. Вызвать другую функцию GDI для вывода текста во вторичный буфер.

6. Освободить контекст устройства.

7. Переключить буфера и вывести результат на экран.

После получения DC в программе встречаются привычные вызовы функций GDI, так что нетрудно забыть, что мы работаем с поверхностью DirectDraw, а не с оконным DC.

Разумеется, суть последнего этапа не всегда заключается в том, что первичный буфер меняется местами со вторичным. При работе в полноэкранном режиме функция CDDSurface::Flip действительно меняет буфера местами, однако в оконном режиме содержимое вторичного буфера копируется в первичный функцией Bit. В случае смены буферов не нужно беспокоиться о новой роли каждого из них, так как за всем следит DirectDraw, и когда мы требуем указатель на вторичный буфер, то всегда получаем именно то, что нужно.




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



Книжный магазин