Краткое описание по работе с DirectDraw
В этом разделе будет дан общий обзор DirectDraw, а также общие концепции.
1. DirectX API
Microsoft's DirectX API состоит из следующих групп:
· DirectDraw - прямой доступ к видеопамяти
· DirectSound - прямой доступ к звуковой карте
· DirectPlay - прямой доступ к сетевым возможностям для обеспечения multiplayer mode
· DirectInput - поддержка игровых устройств ввода
Все это предназначено для того, чтобы дать возможность программисту получить прямой доступ к различному (в основном игровому) железу. В данной статье дается пояснения к использованию интерфейса DirectDraw.
2. Что такое DirectDraw
DirectDraw
это обычный менеджер видеопамяти. Его основное назначение предоставить программисту прямой доступ к видеопамяти. Осуществлять такие операции, как копирование видео память -> видеопамять и т.п.. При этом напрямую могут использоваться возможности видеоконтроллера и освобождать от этих операций центральный процессор. Кроме того, DirectDraw напрямую использует и другие возможности Вашей виде окарты, как то спрайты, z - буферизацию и т.п.. Начиная с 5 версии DirectX дополнительно используются (во всяком случае декларируется использование) возможностей ММX - что позволяет за один цикл обрабатывать и передавать 64 бита видеоинформации.
3. Взаимоотношение с WinG
В основном идея DirectDraw взята с WinG. Отличие состоит в том, что в основу идеологии WinG положено копирование изображений из обычной памяти в видеопамять, в то время как основной идеей DirectDraw является копирование видеопамяти в видеопамять, хотя также может поддерживаться и режим память->видеопамять. Что, конечно, является необходимым в мире видео карт с 1 метром видеопамяти.
4. Поверхности DirectDraw - вид доступа к видеопамяти
Вашей основной задачей, как программиста, поместить в видеопамять столько изображений, необходимых для выполнения Вашей программы, как только возможно. Благо при использовании DirectDraw вся видеопамять доступна для Вас. Вы можете использовать ее для запоминания различных изображений (bitmap) , спрайтов и тп. Все эти видео элементы в терминологии DirectDraw называются поверхностями (surfaces). Основная последовательность при загрузке изображений следующая - Вы создаете поверхность(просто область видеопамяти (или системной памяти - если ресурсы видеопамяти исчерпаны)) , и загружаете в нее необходимое изображение.
DirectDraw
обеспечен функциями определения доступной видео памяти - таким образом Вы можете оптимизировать ее использование для конкретной видео карты. Минимальным для нормального использования DirectDraw представляется использование 2 M видео карт, хотя это субъективное мнение
5. От смены страниц (flipping) к анимации
Стандартным методом организации анимации является перенос видеобуферов изображения из видеопамяти в за экранную поверхность (offscreen buffer) с последующим переключением экранной и за экранной поверхности (flipping) которое выполняется простой функцией Flip(). При этом тот видеобуфер который был экранной поверхностью - становится за экранной поверхностью и наоборот .
Частота смены буферов может быть достаточно высокой и ограничена частотой кадровой развертки монитора (60 - 100 Гц). Поддержка DirectDraw
вертикальной развертки приводит к более гладкой смене кадров.
Интерфейсы DirectDraw и COM
Все DirectX объекты являются порождениями от COM объектов.
При этом Вы можете, как использовать напрямую возможности COM , так и вообще не знать о них. Весь минимально необходимый интерфейс к COM скрыт (уже поддерживается) объектами DirectX.