Краткое описание по работе с Direct Draw

             

Программирование DirectDraw - часть 5


/p>

В исходный код инициализации DirectDraw необходимо добавить следующие две строчки:

Пример кода загрузки палитры в DirectDraw

 

 

 

    ......................

    lpDDPal        = LoadPaletteFromDibFile(lpDD, szBitmap);   // Создадим и Получим указатель на палитру

    if (lpDDPal)    lpDDSPrimary->SetPalette(lpDDPal);            // и установим эту палитру для первичной видео поверхности

    ....................       

 

5. Настройка прозрачного цвета

В DirectDraw

возможно использование прозрачного цвета(ов) (входа в палитру (color key)) используемого при копировании с поверхности на поверхность. Обычно для этого задается диапазон цветов (входов в палитру), которые не переносятся при копировании (Blt функциях).

Пример кода установки прозрачных цветов в DirectDraw

 

 

 

 

 

    // Установим прозрачный цвет для данного изображения .

    //

    DDCOLORKEY

ddColorKey;

     ddColorKey.dwColorSpaceLowValue = 0xff; // весь диапазон прозрачности - 255 вход в палитру (обычно он черный)

     ddColorKey.dwColorSpaceHighValue = 0xff;

    //  Далее необходимо сделать что-то типа для вех поверхностей (изображений ) для которых нужен эффект

    // прозрачности при выполнении операций копирования

  [Имя указателя на DirectDraw

поверхность]->SetColorKey( DDCKEY_SRCBLT, &ddck );

 

7. Собрать все вместе и готово. Построение динамики.

Теперь осталось только организовать цикл по обновлению вторичной поверхности и после его обновления проведения смены экранов (Flip) . Этот цикл лучше всего организовывать на цикле обработки сообщений Вашего приложения (OnIdle), таким образом Вы получите максимальную производительность для конкретной машины на которой выполняется ваше приложение. Сажать это на таймер я не советую - Вам просто будет сложно разобраться и все так подогнать, чтобы с одной стороны по максимуму использовать возможности машины, а с другой не перегружать очередь сообщений. Для общей синхронизации разумно использовать функции мультимедиа типа функции timeGetTime() которая выдает время в мс. Также учтите что чем больше нитей (THREAD) Вы организуете для обеспечения расчетов расположения изображений тем сложнее Вам будет добиться плавности (Windows 95 совсем не многозадачка с вытеснением и квантом времени я не нашел как управлять). Единственное ,что можно использовать для увеличения плавности - Sleep(0) для текущей нити приложения. Но это о другом - просто лирическое отступление - плач по отсутствию возможностей.




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