Frage

Ich benutze XNA als eine nette einfache Basis für einige Grafikverarbeitung auf der CPU zu tun ich, weil es schon eine Menge Dinge, bietet die ich brauche. Derzeit meine „rendertarget“ ist ein Array einer benutzerdefinierten Farb struct ich geschrieben habe, das aus drei Gleitkomma-Feldern besteht: R, G, B.

Als ich das auf dem Bildschirm wiedergegeben werden soll, ich dieses Array manuell konvertieren, um die Farbe struct dass XNA (nur 8 Bits an Präzision pro Kanal) durch einfaches Einklemmen des Ergebnis innerhalb des Bereichs von 0-255 Byte liefert. Ich habe dann setzen Sie diese neue Array als die Daten eines Texture2D (eine SurfaceFormat von SurfaceFormat.Color hat) und machen die Textur mit einem SpriteBatch.

Was ich suche ist eine Möglichkeit, auf der CPU dieses Übersetzungsprozesses loszuwerden und einfach meine Backbuffer auf die GPU als eine Art Textur direkt schicken, wo ich einige grundlegende Nachbearbeitung tun möge. Und ich brauche wirklich ein bisschen mehr Präzision als 8 Bits gibt (nicht notwendigerweise 32-Bit, aber da, was ich tue nicht GPU intensiv ist, kann es nicht schaden, glaube ich).

Wie würde ich mich über das tun dies?

Ich dachte, wenn ich Farbe eine explizite Größe von 32 Byte hat (so 8 Byte padding, weil meine drei Kanäle nur 24 Bits füllen) durch StructLayout und stellen Sie die SurfaceFormat der Textur, die mit dem SpriteBatch gemacht wird SurfaceFormat.Vector4 (32 Bytes groß) und füllte die Textur mit SetData<Color>, dass es vielleicht funktionieren würde. Aber ich bekomme diese Ausnahme:

  

Der Typ, den Sie in dieser Methode für T verwendet werden, ist eine ungültige Größe für diese Ressource.

Ist es möglich, ein beliebiges willkürlich aus struct zu verwenden und sie als Texturdaten in der GPU interpretieren wie können Sie mit den Eckpunkten durch VertexDeclaration durch die Angabe, wie es angelegt?

War es hilfreich?

Lösung

Ich glaube, ich habe, was ich will, indem die Farbe struct Dumping ich gemacht und mit Vector4 für meine Farbinformationen. Dies funktioniert, wenn die SurfaceFormat der Textur auch auf Vector4 gesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top