我使用XNA作爲我在CPU上進行某些圖形處理的一個很好的簡單基礎,因爲它已經提供了我需要的許多東西。目前,我的「rendertarget」是一個自定義顏色數組struct
我寫過,它由三個浮點字段組成:R,G,B。XNA:將結構作爲紋理獲取到GPU
當我想在屏幕上渲染時,我手動將此數組到XNA提供的顏色struct
,只需在0-255的字節範圍內將結果鉗位即可(每個通道只有8位精度)。然後我將這個新陣列設置爲Texture2D
(它的SurfaceFormat
的SurfaceFormat.Color
)的數據,並使用SpriteBatch
來渲染紋理。
我正在尋找的是一種擺脫CPU上的這種翻譯過程的方法,並簡單地將我的backbuffer作爲某種紋理直接發送到GPU,在那裏我想要做一些基本的後期處理。我真的需要比8位更高的精度(不一定是32位,但是因爲我所做的並不是GPU密集型的,所以我估計不會受到傷害)。
我該怎麼做呢?
我想,如果我給32個字節的顏色的明確尺寸通過StructLayout
(所以8個字節的填充,因爲我的三個信道僅填補24位),並設置呈現與SpriteBatch
到SurfaceFormat.Vector4
紋理的SurfaceFormat
( 32字節大),並填充SetData<Color>
紋理,它可能會工作。但我得到這個例外:
您在此方法中用於T的類型對於此資源是無效的大小。
是否有可能像您可以通過指定它是如何奠定了通過VertexDeclaration
頂點使用任何任意由struct
把它解釋爲紋理數據在GPU?