XNA: ottenere una struttura come trama per la GPU
Domanda
Uso XNA come base semplice per l'elaborazione grafica che sto facendo sulla CPU, perché fornisce già molte cose di cui ho bisogno. Attualmente, il mio & Quot; rendertarget & Quot; è una matrice di un colore personalizzato struct
che ho scritto che consiste di tre campi in virgola mobile: R, G, B.
Quando voglio renderizzarlo sullo schermo, converto manualmente questo array nel Colore Texture2D
fornito da XNA (solo 8 bit di precisione per canale) semplicemente bloccando il risultato nell'intervallo di byte 0-255. Ho quindi impostato questo nuovo array come i dati di un SurfaceFormat
(ha un SurfaceFormat.Color
di SpriteBatch
) e renderizzo la trama con un StructLayout
.
Quello che sto cercando è un modo per sbarazzarmi di questo processo di traduzione sulla CPU e semplicemente inviare il mio backbuffer direttamente alla GPU come una sorta di trama, dove voglio fare un post-elaborazione di base. E ho davvero bisogno di un po 'più di precisione di 8 bit lì (non necessariamente a 32 bit, ma dal momento che quello che sto facendo non è intensivo per la GPU, immagino non possa far male).
Come potrei fare per fare questo?
Ho pensato che se avessi dato a Color una dimensione esplicita di 32 byte (quindi 8 byte di riempimento, perché i miei tre canali riempiono solo 24 bit) attraverso SurfaceFormat.Vector4
e impostando il SetData<Color>
della trama che viene renderizzata con < => a VertexDeclaration
(32 byte di grandi dimensioni) e riempito la trama con <=> che potrebbe funzionare. Ma ottengo questa eccezione:
Il tipo che stai usando per T in questo metodo è una dimensione non valida per questa risorsa.
È possibile usare arbitrariamente <=> e interpretarli come dati di trama nella GPU come puoi fare con i vertici attraverso <=> specificando come sono disposti?
Soluzione
Penso di avere quello che voglio scaricando il Colore struct
che ho creato e usando Vector4
per le mie informazioni sul colore. Funziona se SurfaceFormat
della trama è anche impostato su <=>.