DirectX 11 Framebuffer-Capture (C ++, kein Win32 oder D3DX)

8

Ich möchte den Inhalt meines vorderen oder hinteren Puffers mit DirectX 11 in einem Array von Bytes erfassen, das ich dann als Textur oder als Quelle für die Erstellung einer Datei verwenden kann. Ich habe ein Swap-Chain-Setup, viel Rendering passiert und den folgenden Code bis jetzt - den ich nach dem Aufruf von Present sicher anrufen werde.

%Vor%

Es gibt mir immer schwarz mit null Alphas.

Ich hätte normalerweise die Möglichkeit, mit GDI interop BitBlt zu verwenden, um eine Bitmap aus der Swap-Kette zu kopieren - allerdings habe ich Einschränkungen, was bedeutet, dass dies keine gültige Lösung ist.

Auch die D3DX-Bibliothek, die Funktionalität für das Ausführen von Bits enthält, kommt ebenfalls nicht in Frage.

    
jheriko 16.05.2012, 17:41
quelle

3 Antworten

8

Also. Ein wenig mehr Experimente zeigten das "Problem". Durch die Beschreibung der Framebuffer-Textur und die Erstellung der neuen Textur wurde das Problem gelöst ...

%Vor%     
jheriko 16.05.2012, 18:08
quelle
2

Swap-Kettenpuffer können einfach mit D3D11 gespeichert werden, wie unten gezeigt.

  
  1. Erstellen Sie ein Texture2D genauso wie der Backbuffer der Swap-Kette, den Sie speichern möchten
  2.   
  3. Ruft CopyResource im Gerätekontext auf, um aus dem Back-Buffer in die neu erstellte Textur
  4. zu kopieren   
  5. Rufen Sie D3DX11SaveTextureToFile (...) mit dem Dateinamen
  6. auf   

erfundenes Codefragment:

%Vor%     
Indy9000 10.08.2012 10:36
quelle
2

Um die richtige Größe zu kopieren, verwenden Sie den folgenden Code.

%Vor%     
Yogan 23.09.2015 12:56
quelle

Tags und Links