Also irgendwas mache ich gewaltig falsch.
Ich habe eine Demo erstellt, in ActionScript 3, mit der AIR Runtime und der Away3D Engine.
Ich lasse einen texturierten Würfel rotieren und habe die maximale FPS auf 120 gesetzt.
- Bei einer Kamera, einer View und dem Auslesen der BitmapData aus der View habe ich 100 - 120 FPS.
- Bei vier Kameras, vier Views und auslesen der BitmapData der jeweiligen Kameras habe ich 70 - 100 FPS.
(Mehr als vier Views kann ich nicht erstellen da ich sonst zu viele Stage3D Instanzen habe)
Alternativ dazu, meine Demo in C++ und DirectX 11.
Ich habe über die WinAPI ein Fenster erstellt und DirectX 11 initialisiert.
Hier lasse ich ebenfalls ein einfaches Bild rendern und habe 13.000 FPS (keine maximale FPS festgelegt)
- Bei einer RenderTexture, einer CaptureTexture und einmal CopyResource() habe ich 1.500 FPS
- Bei 20x RenderTexture, 20x CaptureTexture und 20x CopyResource() habe ich 70 - 80 FPS
(Eine deutliche Verbesserung gegenüber ActionScript 3)
Wenn ich nun aber den Inhalt der CaptureTexture auslesen möchte dann bricht die FPS komplett ein.
Ich lese die Daten per D3DX11SaveTextureToMemory() in einen ID3D10Blob.
Bei einer RenderTexture, einer CaptureTexture und einmal CopyResource() und einmal D3DX11SaveTextureToMemory() bin ich bei 22 FPS.