Образец MMXSwarm: демонстрация класса CImage и поддержки MMX в Visual C++
Обновлен: Ноябрь 2007
Образец MMXSwarm основан на MFC и демонстрирует использование класса MFC CImage, типов данных __m64 и __m128i, а также файлов DIB.
В образце показана реализация поддержки CImage в приложении для простых операций загрузки и сохранения данных в многочисленных форматах изображений. Кроме того, образец демонстрирует непосредственную работу с рабочей областью DIB, а также использование поддержки целочисленных инструкций MMX и SSE2 в компиляторах высокого уровня для оптимизации работы с растровыми изображениями без написания кода на ассемблере.
Файлы Surface.* в проекте содержат базовый класс C++ для работы с областью DIB.
Файлы MMXSurface*.* содержат производные классы с оптимизацией MMX. Файл MMXWrapper.h содержит простой класс, который инкапсулирует тип данных __m64 и операции компилятора в привычном классе C++ для 16-разрядных операций MMX с насыщением.
Файлы SSE2Surface*.* содержат производные классы с оптимизацией SSE2. Файл SSE2Wrapper.h содержит простой класс, который инкапсулирует тип данных и операции __m128i в привычном классе C++ для 16-разрядных целочисленных операций SSE2 с насыщением.
Эти классы-оболочки обычно не используются без доработки и содержат только набор функций, достаточный для данного образца. В образце не используется архитектура документов и представлений. Класс CChildView является производным от CWnd и привязан к фрейму окна.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск образца
Построение и запуск образца MMXSwarm
Откройте решение MMXSwarm.sln.
В меню Построение выберите команду Построить.
В меню Отладка выберите пункт Запуск без отладки.
В режимах "Отладка" и "Выпуск" списки сборок для файлов MMXSurface*.cpp и SSE2Surface*.cpp создаются в выходном каталоге. Просмотрите в этих файлах код, созданный компонентами проекта — MMX и SSE2.
Постройте образце в режиме "Выпуск", чтобы оценить увеличение скорости работы, достигнутое в результате собственной поддержки целочисленных инструкций MMX и SSE2. Кроме того, отладочные данные, создаваемые в ходе построения в режиме "Выпуск", упрощают пошаговое перемещение по коду, созданному MMX и SSE2.
Чтобы получить самые лучшие результаты, запустите образец в режиме с глубиной цвета 32 разряда.
Образец рисует на экране большое количество мелких объектов и с помощью специальной подпрограммы затухания размывает изображение с течением времени. Меню File дает возможность сохранить текущее изображение или загрузить существующее изображение. Меню View позволяет включить или выключить размытие и группу мелких объектов. В меню View также находится команда "Pause Blit", которая отключает для экрана функцию BitBlt, увеличивающую частоту кадров в реализации функций размытия. Кроме того, асинхронным образом проверяется нажатие нескольких клавиш для других операций с DIB (SHIFT, ПРОБЕЛ, СТРЕЛКА ВВЕРХ и DELETE). Наконец, меню CImage позволяет выбрать глубину цвета для текущего изображения DIB. Обычно лучше всего выбрать глубину цвета, совпадающую с параметрами рабочего стола. Для каждого значения глубины цвета есть возможность размытия с помощью универсальной подпрограммы C++ или оптимизированной подпрограммы с поддержкой MMX или SSE2. В строке состояния находится значение частоты кадров, которое иллюстрирует разницу в производительности.
Ключевые слова
В этом образце показаны следующие ключевые слова:
CImage::GetExporterFilterString, CImage::Load, CImage::SaveAdvanced, CImage::Create, CImage::GetPitch, CImage::GetDC, CImage::ReleaseDC, CImage::Destroy, CImage::BitBlt, CImage::GetBits, CImage::GetHeight, CImage::GetPixelAddress, GetAsyncKeyState, CDC::GetDeviceCaps, ON_UPDATE_COMMAND_UI_RANGE, CWnd::OnSizing, __m64, __m128i, CWinApp::OnIdle, _m_from_int, _mm_setzero_si64, _mm_adds_pu16, _mm_subs_pu16, _mm_srli_pi16, _mm_slli_pi16, _mm_and_si64, _mm_or_si64, _mm_andnot_si64, _m_to_int, _mm_packs_pu16, _mm_unpacklo_pi8, _mm_unpackhi_pi8, _mm_loadl_epi64, _mm_setzero_si128, _mm_set1_epi64, _mm_adds_epu16, _mm_subs_epu16, _mm_srli_epi16, _mm_slli_epi16, _mm_and_si128, _mm_or_si128, _mm_andnot_si128, _mm_packus_epi16, _mm_store_si128, _mm_load_si128, _mm_packus_epi16, _mm_unpacklo_epi8, _mm_unpackhi_epi8