MMXSwarm-Beispiel: Veranschaulicht, CImage und Visual C++ MMX-Unterstützung
MMXSwarm ist ein MFC-Beispiel, das wie MFC https://msdn.microsoft.com/de-de/library/bwea7by5(v=vs.100) -Klasse CImage, __m64 und __m128i Datentypen und geräteunabhängige Bitmaps (DIBs) verwendet wird.
Das Beispiel veranschaulicht die Implementierung von CImage-Unterstützung in eine Anwendung für das Laden und Speichern von Daten in verschiedenen Bildformaten. Darüber hinaus demonstriert das Beispiel direkte Manipulation der DIB-Oberfläche sowie die Verwendung auf höherer Ebene Compilerunterstützung für MMX- und SSE2-Integer-Anweisungen zum Optimieren der Bitmap Manipulation ohne Assemblercode schreiben zu müssen.
Im Projekt enthalten die Surface.*-Dateien die C++-Basisklasse für die Bearbeitung der DIB-Oberfläche:
Die MMXSurface 1. *-Dateien enthalten abgeleitete Klassen mit MMX-Optimierungen. MMXWrapper.h enthält eine einfache Klasse, die der Compiler __m64 Datentyp und Operationen in eine C++-Anzeigenamen-Klasse für 16-Bit-gesättigte MMX-Operationen einschließt.
Die SSE2Surface 1. *-Dateien enthalten abgeleitete Klassen mit SSE2-Optimierungen. SSE2Wrapper.h enthält eine einfache Klasse, die der Compiler __m128i Datentyp und Operationen in einer angezeigten C++-Klasse für 16-Bit-gesättigte SSE2-Ganzzahloperationen einschließt.
Diese Wrapperklassen sind nicht im Allgemeinen sinnvoll "ist als", enthält lediglich genügend Funktionen für das Beispiel. Im Beispiel wird die Dokument-/Ansichtarchitektur Archictecture nicht verwendet. CChildView -Klasse ist von CWnd abgeleitet und an das Rahmenfenster gebunden.
![]() |
---|
Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien. |
So erhalten Sie Beispiele und Anweisungen für deren Installation:
Um Beispiele von Visual Studio zuzugreifen
im Menü Hilfe Menü klicken Beispiele.
Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.
- Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.
Erstellen und Ausführen des Beispiels
So erstellen Sie und führen das MMXSwarm-Beispiel
Öffnen Sie die Projektmappe MMXSwarm.sln.
erstellen Sie Menü, klicken Sie auf erstellen.
Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.
Im Debug und Release-Modus werden Auflistungen der MMXSurface*.cpp und SSE2Surface*.cpp Assembly im Ausgabeverzeichnis generiert. Überprüfen Sie diese Dateien den Code, der von den MMX- und SSE2-Bereichen des Projekts generiert wurde.
Erstellen des Beispiels im Releasemodus können die von der Verwendung des systeminternen MMX- und SSE2 Ganzzahl Unterstützung gewonnenen Geschwindigkeitsverbesserungen finden Sie unter. Darüber hinaus Debug-Informationen wird generiert, für das Releasebuild um schrittweise die MMX zu erleichtern und SSE2 generierten Codes.
Führen Sie die besten Ergebnisse erzielen Sie das Beispiel im 32-Bit-Farben-Modus.
Im Beispiel zeichnet einen einfachen Swarm auf dem Bildschirm und eine benutzerdefinierte Ausbleichung Routine verwendet, um das Bild über einen Zeitraum zu weichzeichnen. Im Dateimenü enthält die Optionen zum Speichern des aktuellen bzw. zum Laden eines vorhandenen Bildes. Im Ansicht stehen Optionen zum Aktivieren Deaktivieren des Weichzeichners und des Swarm. Das Menü Ansicht enthält auch "Pause Blit"Befehl, der BitBlt auf dem Bildschirm deaktiviert wird, die eine bessere Frame Rate Unterschiede in den Implementierungen Unscharf/Scharf ermöglicht. Darüber hinaus werden einige Tastaturbefehle asynchron nach weiteren Änderungen (UMSCHALTTASTE, LEERTASTE, oben und ENTF) überprüft. CImage Menü schließlich können Sie die Bittiefe für die DIB auswählen. In der Regel empfiehlt es sich Wenn Sie die desktop Bittiefe übereinstimmt. Jede Bittiefe Option für das Weichzeichnen mit einer generischen C++-Routine hat, oder eine mit dem MMX- oder SSE2 Ganzzahl systeminterne Funktionen optimiert. Die Statusleiste enthält eine Maßeinheit Rahmen pro Sekunde die Leistungsunterschiede zu veranschaulichen.
Schlüsselwörter
Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:
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