|
Со дня возникновения ОС Windows низкое быстродействие ее графического интерфейса GDI не было секретом. Это свойство он пронес через годы и сохранил до сих пор. Для приложений, предъявляющих повышенные требования к скорости вывода графической информации, предлагались различные решения, позволявшие обходить GDI и оптимизировать работу с видеопамятью. На сегодняшний день старейшим, но успешно развивающимся инструментом для быстрой работы с графикой в среде Windows является библиотека DirectDraw из обширного комплекса DirectX. Вообще, назначение технологии DirectX — это ускорение работы с различными периферийными устройствами (см. рисунок).
DirectDraw — это мощный и гибкий API, с помощью которого можно создать практически любое графическое приложение Windows. Работа с трехмерной графикой осуществляется посредством библиотеки Direct3D, но на базе DirectDraw. Поэтому глубокое освоение возможностей данного API является необходимостью для многих программистов.
Основная проблема при освоении DirectX вообще и DirectDraw в частности — это выбор информации из моря документов и литературы, посвященных описанию этой технологии. Впрочем, надо отметить, что "море" существует для программистов, в достаточной степени владеющих английским языком. Для тех же, кто им не владеет (есть ведь и такие программисты), существует прямо противоположная проблема: где бы найти хоть какую-нибудь информацию по столь актуальному вопросу. Отличным решением обоих проблем стала книга Стена Трухильо "Графика для Windows средствами DirectDraw", выпущенная издательством "ПИТЕР" в серии "Библиотеки программиста".
Конечно, одна книга не может содержать исчерпывающую информацию по DirectDraw. Такая задача автором и не ставилась. Зато здесь можно найти описания конкретных проблем, возникающих при работе с DirectDraw, и их решений. Серьезное внимание уделяется также некоторым важным особенностям идеологии данной библиотеки, которые трудно заметить, читая обычную техническую документацию или справочную информацию. Кроме DirectDraw, в книге рассматривается и популярная библиотека DirectInput, поскольку приложения с быстрой графикой, как правило, требуют интерактивного взаимодействия с пользователем. Было бы не вполне логично писать программы с быстрой графикой и медленной обработкой управляющих воздействий.
К книге прилагается компакт-диск, на котором можно найти дистрибутив Runtime-файлов DirectX 5.0 и исходные тексты программ, иллюстрирующих основные возможности DirectDraw и DirectInput. А самый главный подарок разработчикам графических приложений — программа AppWizard, формирующая заготовки для DirectDraw-проектов.
Несмотря на то, что данная книга ориентирована на достаточно опытных программистов, имеющих некоторое начальное представление о DirectDraw, начинается она с краткого вводного курса. И, хотя этот курс действительно краток, почти любой читатель найдет в нем много новых и полезных для себя сведений. Здесь рассмотрены все интерфейсы и структуры DirectDraw, причем особое внимание уделяется назначению и условиям применения каждого интерфейса и его методов. Таким образом, прочитав первую главу, каждый сможет уяснить логику построения библиотеки и основные особенности создания как полноэкранных, так и оконных графических приложений для Windows.
Далее описываются проблемы быстродействия, возникающие при работе с графикой под Windows. Рассматриваются все пути оптимизации графических программ. Автор резонно замечает, что, хотя эффективность программы, написанной на ассемблере хорошим программистом, несомненно, выше аналогичной программы, написанной на языке высокого уровня, современные объемы коммерческих систем и требования к скорости их разработки требуют использования инструментария самого высокого уровня. Таким образом, сочетание MFC и DirectDraw весьма удачно. Тем, кто не согласен с доводами в пользу MFC, придется продолжать чтение, мысленно внося соответствующие поправки, поскольку все примеры ориентированы на использование стандартных классов.
На конкретных примерах рассмотрены проблемы создания программ с возможностью переключения видеорежимов и частоты кадров, подробно освещена технология быстрого вывода на экран растровых изображений, представленных в различных форматах. Каждый фрагмент приводимых в пример исходных текстов подробно прокомментирован с обоснованием выбора применяемых установок и последовательности действий. По ходу изложения материала часто можно встретить конкретные предупреждения об опасностях, возникающих при неправильном заполнении соответствующих структур данных или при неверной последовательности вызова функций. Автор позволяет избежать множества аварийных ситуаций и мучительных поисков их причин, делясь своим богатым (в том числе и на такие случаи) опытом.
Библиотека DirectInput не столь загадочна и многогранна, как DirectDraw. Возможно, в соответствующем разделе наиболее опытные программисты найдут немного нового. Для тех же, кто не имеет абсолютной уверенности в полноте своих знаний, данный раздел будет очень интересен, особенно если это Ваше первое знакомство с DirectInput. Здесь рассмотрены все интерфейсы и функции, входящие в DirectInput, с описанием последовательности их инициализации и различных способов использования. В качестве примера приводятся две программы, использующие ввод как непосредственных, так и буферизованных данных.
При создании серьезных графических приложений наверняка будут полезными предлагаемые методы отображения курсора, проигрывания AVI-файлов, проверки столкновений. Даже если не использовать приведенные фрагменты исходных текстов "один к одному", могут оказаться интересными подходы к решению конкретных проблем и способы обеспечения надежности работы программ. Книга Стена Трухильо может использоваться как справочное пособие, но есть смысл все же прочитать ее от начала до конца. Полезные советы могут встретиться даже там, где трудно ожидать чего-то неизвестного, так что потраченное на это время непременно окупится.
Где же это время найти, особенно человеку, заваленному работой и уже в некоторой степени освоившему DirectDraw? "Графику для Windows" можно начать читать, например, в периоды перезагрузки компьютера, в очередной раз повисшего при запуске неудачно написанного Вами приложения DirectDraw.
|