Стэн Трухильо «Графика для Windows средствами DirectDraw» Предисловие Введение Для чего написана эта книга Требования к читателю Глава 1. Краткий курс DirectDraw Что такое DirectDraw? Термины и концепции Аппаратное ускорение Блиттинг Палитры Другие типы поверхностей Спецификация COM фирмы Microsoft GUID Интерфейсы DirectDraw и DirectDraw2 Функции создания интерфейсов Функция GetCaps() Функции для работы с видеорежимами Функции для работы с поверхностями Функции для работы с частотой смены кадров Функция GetFourCCCodes() Функции описания поверхностей Функции блиттинга Функция Flip() Функции для работы с цветовыми ключами Функции GetDC() и ReleaseDC() Функции IsLost() и Restore() Функция GetDDInterface() Оверлейные функции Функции палитры Интерфейс DirectDrawClipper Дополнительные интерфейсы DirectDraw Создание приложений DirectDraw Полноэкранные приложения Комбинированные приложения Runtime-файлы DirectX DirectX SDK Windows NT и Windows 95 Заключение Традиционная оптимизация Не бойтесь плавающей точки FPS - еще не все Долой аппаратную зависимость! Будущее DirectX Заключение Создание приложения Bounce Структура приложения Структура приложения Специализированные классы Инициализация Инициализация DirectDraw Получение списка драйверов DirectDraw Выбор драйвера Инициализация DirectDraw Обнаружение видеорежимов Выбор видеорежима Активизация видеорежима Создание поверхностей Подготовка поверхностей Функции для работы с поверхностями Графический вывод Функция DrawScene() Функция BltSurface() Восстановление поверхностей Завершение Оконные приложения Графический вывод Заключение Переключение видеорежимов Обнаружение видеорежимов и частот смены кадров Программа Switch Вывод текста Класс SwitchWin DECLARE_MESSAGE_MAP() Инициализация приложения Графический вывод СОВЕТ Обработка пользовательского ввода Восстановление поверхностей Частота смены кадров Программа SuperSwitch DECLARE_MESSAGE_MAP() Инициализация приложения Графический вывод Обработка пользовательского ввода Заключение СОВЕТ Глубина пикселей Форматы пикселей Получение данных о формате пикселей 16 Переменные формата пикселей в классе DirectDrawWin Блокировка поверхностей BMP-файлы Структура заголовка СОВЕТ Графические данные Функция CreateSurface() Функция CreatePalette() Передача графических данных 8-битные поверхности 16-битные поверхности 24-битные поверхности 32-битные поверхности Программа BmpView Прокрутка больших поверхностей Определение класса DECLARE_MESSAGE_MAP() Инициализация приложения Выбор и отображение BMP-файла СОВЕТ Графический вывод Заключение Глава 6. DirectInput Быстродействие Опросы и оповещения Данные об осевых смещениях Интерфейс DirectInput Интерфейс DirectInputDevice Программа Qwerty Класс QwertyWin DECLARE_MESSAGE_MAP() Инициализация DirectInput Захват клавиатуры Завершение приложения Программа Smear Класс SmearWin DECLARE_MESSAGE_MAP() Инициализация DirectInput Инициализация мыши Инициализация клавиатуры Захват мыши и клавиатуры Получение данных от мыши Завершение приложения Глава 7. Проблема курсора Частичное обновление экрана Обновление курсора Переключение страниц Потоки и процессы Синхронизация потоков Классы потоков в MFC Решение проблемы курсора Поток ввода Программа Cursor Класс CursorWin DECLARE_MESSAGE_MAP() Инициализация приложения Функция DrawScene() Поток ввода Завершение приложения Заключение AVI-файлы Video For Windows СОВЕТ Программа AviPlay Класс AviPlayWin DECLARE_MESSAGE_MAP() Функция OnCreate() Функция ShowDialog() Функция LoadAvi() Функция CreateAviSurface() Функция InstallPalette() Функция DrawScene() Функция UpdateAviSurface() Функция RestoreSurfaces() Функция OnDestroy() Заключение Общее решение Функции проверки столкновений СОВЕТ СОВЕТ Класс Sprite Программа Bumper AFX_MSG DECLARE_MESSAGE_MAP() Инициализация приложения Функция DrawScene() Функция OnKeyDown() Заключение Отладка Проблемы Отладочные макросы Удаленная отладка Отладочные сообщения DirectX Замечания о Visual C++ Прекомпилированные заголовки Файлы DirectX SDK Фокусы ClassView Варианты Visual C++ Символическая константа INITGUID (устаревшая) Где достать DirectX SDK
Функция GetFourCCCodes() Наш обзор интерфейса DirectDraw завершается функцией GetFourCCCodes() . Она возвращает коды FourCC, поддерживаемые видеокартой. Коды FourCC используются для описания YUV-поверхностей, не относящихся к стандарту RGB. Мы не будем рассматривать такие поверхности, так как они выходят за рамки этой книги.
Интерфейсы DirectDrawSurface Множественные интерфейсы DirectDrawSurface , как и интерфейсы DirectDraw , возникли из-за особенностей спецификации COM. В исходном варианте работа с поверхностями осуществлялась через интерфейс DirectDrawSurface . В DirectX 2 появились новые функциональные возможности, представленные интерфейсом DirectDrawSurface2 , а в DirectX 5 возник интерфейс DirectDrawSurface3 .
Хотя в этой книге вместо DirectDraw повсюду используется интерфейс DirectDraw2 , для работы с поверхностями мы будем придерживаться исходного интерфейса DirectDrawSurface , потому что нововведения интерфейсов DirectDrawSurface2 и DirectDrawSurface3 не слишком важны. В оставшейся части книги термин интерфейс DirectDrawSurface будет обозначать все три интерфейса, если при этом не возникает двусмысленности.
Самый большой из всех интерфейсов DirectDraw, DirectDrawSurface , позволяет копировать и стирать содержимое поверхности, а также напрямую работать с ним из программы. В общей сложности он поддерживает 36 функций, перечисленных ниже (в алфавитном порядке):
• AddAttachedSurface()
• AddOverlayDirtyRect()
• Blt()
• BltBatch()
• BltFast()
• DeleteAttachedSurface()
• EnumAttachedSurfaces()
• EnumOverlayZOrders
• Flip
• GetAttachedSurface()
• GetBltStatus()
• GetCaps()
• GetClipper()
• GetColorKey()
• GetDC()
• GetDDInterface()
• GetFlipStatus()
• GetOverlayPosition()
• GetPalette()
• GetPixelFormat()
• GetSurfaceDesc()
• IsLost()
• Lock()
• PageLock()
• PageUnlock()
• ReleaseDC()
• Restore()
• SetClipper()
• SetColorKey()
• SetOverlayPosition()
• SetPalette()
• SetSurfaceDesc()
• Unlock()
• UpdateOverlay()
• UpdateOverlayDisplay()
• UpdateOverlayZOrder()