|

Программирование графики
Xakep, номер #040, стр. 040-075-2
Ну, в общем, все в таком духе. Мы начнем изучение с 2D графики и, соответственно, с Ddraw.dll.
DirectX - это объектная библиотека, построенная по технологии COM. Не пугайся, я постараюсь объяснить все как можно проще, чтобы ты не ощутил всех трудностей COM кодинга. DirectDraw, грубо говоря, состоит из следующих объектов:
DirectDrawSurface - область видеопамяти. К ней можно обращаться напрямую и производить практически любые действия.
DirectDrawPalette - интерфейс для работы с палитрами. Он нужен, если ты настроился на 256- или, не дай бог, 16-цветную игру.
DirectDrawClipper - этот интерфейс отвечает за обрезания. Он нужен, если ты пишешь оконное приложение. В этом случае тебе понадобится обрезать все, что выходит за пределы окна.
На этом теорию надо прекращать. Постепенно я буду тебя знакомить не только с практикой, но и с теорией программирования графики, а может быть, будет и отдельная статья.
Пошкодим
Если ты не прочитал статью по Delphi в этом номере, то сделай это сейчас. Там я описал шаблон минимального приложения в Delphi, который мы будем использовать во всех примерах при кодинге в DirectX. Открой созданный там проект, сейчас мы его будем пополнять.
Для начала в раздел var добавь следующие переменные:
var
...
...
FDirectDraw : IDirectDraw7;
FPrimarySurface : IDirectDrawSurface7;
SurfaceDesc : TDDSurfaceDesc2;
hRet : HRESULT;
DC : HDC;
bltfx : TDDBLTFX;
Чуть позже ты узнаешь, зачем они нужны. А сейчас пойди в раздел uses и добавь недостающие модули:
uses windows, Graphics, messages, sysutils, DirectDraw;
Здесь DirectDraw - это файл DirectDraw.pas, в котором описаны все функции для работы с графической библиотекой. Если у тебя нет этого файла, то ты сможешь его скачать с моего сайта. Я даже тебе советую сделать это в любом случае, потому что разные версии этого файла работают по-разному, и могут возникнуть проблемы с компиляцией.
Инициализация
Теперь перейди туда, где написан комментарий "Здесь можно производить инициализацию", это перед циклом обработки сообщений. Вот здесь мы начнем DX кодинг.
Первое, что нужно сделать, - проинициализировать сам DirectDraw:
hRet := DirectDrawCreateEx (nil, FDirectDraw, IDirectDraw7, nil);
if hRet <> DD_OK then Halt;
Почти все DirectDraw функции возвращают значение типа HRESULT. Если оно равно DD_OK, то все прошло ОК. Если результат другой, то можно вылететь из программы, потому что может быть не установлен DirectX или система не может его проинициализировать. Я сделаю проверку корректности только для этой строки кода, потому что здесь это наиболее критично. В остальных случаях я буду надеяться на положительный результат.
У функции DirectDrawCreateEx есть четыре параметра:
1. Используемый для вывода драйвер. Возможные значения: DDCREATE_HARDWAREONLY - использовать только аппаратные возможности; DDCREATE_EMULATIONONLY - использовать только эмуляцию; nil - использовать аппаратные возможности и эмуляцию.
2. Указатель на переменную типа TDirectDraw, которая будет инициализирована.
3. Версия DirectDraw, которую мы хотим получить. Сейчас существует уже 8-я версия, но указывать надо именно IDirectDraw7.
Назад на стр. 040-075-1 Содержание Вперед на стр. 040-075-3
|