Графика для Windows средствами DirectDraw
Шрифт:
Класс SwitchWin содержит всего одну открытую (public) функцию —
Следующие пять функций являются переопределенными версиями функций DirectDrawWin:
• SelectDriver
• SelectInitialDisplayMode
• CreateCustomSurfaces
• DrawScene
• RestoreSurfaces
С помощью функции SelectDriver приложение выбирает используемое видеоустройство (если их несколько). Она полностью совпадает со стандартной версией, создаваемой AppWizard, и выводит меню при наличии нескольких драйверов. Функция SelectInitialDisplayMode задает исходный видеорежим, устанавливаемый приложением. Здесь снова используется стандартная версия AppWizard, которая ищет видеорежим с параметрами 640x480x16.
Функция CreateCustomSurfaces вызывается DirectDrawWin при активизации нового видеорежима; мы воспользуемся этой функцией для создания и подготовки поверхностей программы Switch. Функция DrawScene отвечает за обновление экрана; она будет использоваться для отображения анимации, меню видеорежимов и значения FPS. Наконец, функция RestoreSurfaces вызывается классом DirectDrawWin при необходимости восстановить потерянные поверхности. Эта функция восстанавливает не только сами поверхности, но и (для особо важных поверхностей) их содержимое.
Затем класс SwitchWin объявляет четыре функции, специфические для программы Switch:
• CreateMenuSurface
• UpdateMenuSurface
• CreateFPSSurface
• UpdateFPSSurface
Это вспомогательные функции для работы с поверхностями, используемыми для вывода меню видеорежимов и значения FPS. Они подробно рассматриваются ниже в этой главе.
Закрытые переменные, объявленные в конце, предназначены для отображения анимации, меню видеорежимов и FPS, а также для работы со шрифтами средствами Win32.
Переменная bmpsurf — указатель на интерфейс DirectDrawSurface, через который мы будем обращаться к данным перемещаемого растра, а переменные x, y, xinc и yinc определяют его положение.
Указатель menusurf используется для доступа к поверхности меню видеорежимов, а в целой переменной selectmode хранится индекс текущего активного видеорежима.
Следующие переменные списка связаны с выводом значения FPS. Переменная fpssurf — указатель на интерфейс DirectDrawSurface, через который производится доступ к поверхности FPS. Структура типа RECT (fpsrect) содержит размеры поверхности fpssurf. Логическая переменная displayfps управляет отображением значения FPS, а в переменной framecount хранится количество кадров, выведенных в очередном временном интервале измерения FPS.
Две последние переменные, smallfont
Наше знакомство с программой Switch начинается с конструктора switchWin, внутри которого происходит первоначальная инициализация переменных класса. Не следует путать эту инициализацию с той, что выполняется функцией CreateCustomSurfaces, потому что в отличие конструктора CreateCustomSurfaces вызывается при каждой смене видеорежима. Конструктор выглядит так
В основном конструктор просто обнуляет переменные. Два логических номера шрифтов инициализируются функцией Win32 CreateFont. В программе используются два разных размера одного и того же шрифта: крупным шрифтом выводится заголовок на поверхности меню видеорежимов, а мелким — описания видеорежимов и текст со значением FPS.
После того как объект SwitchWin будет создан, DirectDrawWin вызывает функции SelectDriver и SelectInitialDisplayMode. Поскольку в программе Switch обе функции ведут себя стандартным образом (как описано в главе 3), мы не будем их рассматривать.
Затем класс DirectDrawWin вызывает функцию SwitchWin::CreateCustomSurfaces, в которой подготавливает три поверхности, используемые программой Switch:
Содержимое одной из этих трех поверхностей определяется BMP-файлом. Функция CreateCustomSurfaces по текущей глубине пикселей определяет, какой из двух BMP-файлов нужно использовать. Затем указатель на поверхность (bmpsurf) инициализируется функцией DirectDrawWin::CreateSurface. В случае 8-битного видеорежима содержимое палитры DirectDraw определяется палитрой из BMP-файла.