2009-10-24 46 views
1

我使用XNA作爲我在CPU上進行某些圖形處理的一個很好的簡單基礎,因爲它已經提供了我需要的許多東西。目前,我的「rendertarget」是一個自定義顏色數組struct我寫過,它由三個浮點字段組成:R,G,B。XNA:將結構作爲紋理獲取到GPU

當我想在屏幕上渲染時,我手動將此數組到XNA提供的顏色struct,只需在0-255的字節範圍內將結果鉗位即可(每個通道只有8位精度)。然後我將這個新陣列設置爲Texture2D(它的SurfaceFormatSurfaceFormat.Color)的數據,並使用SpriteBatch來渲染紋理。

我正在尋找的是一種擺脫CPU上的這種翻譯過程的方法,並簡單地將我的backbuffer作爲某種紋理直接發送到GPU,在那裏我想要做一些基本的後期處理。我真的需要比8位更高的精度(不一定是32位,但是因爲我所做的並不是GPU密集型的,所以我估計不會受到傷害)。

我該怎麼做呢?

我想,如果我給32個字節的顏色的明確尺寸通過StructLayout(所以8個字節的填充,因爲我的三個信道僅填補24位),並設置呈現與SpriteBatchSurfaceFormat.Vector4紋理的SurfaceFormat( 32字節大),並填充SetData<Color>紋理,它可能會工作。但我得到這個例外:

您在此方法中用於T的類型對於此資源是無效的大小。

是否有可能像您可以通過指定它是如何奠定了通過VertexDeclaration頂點使用任何任意由struct把它解釋爲紋理數據在GPU?

回答

2

我想我有我想要的顏色struct傾銷我使用和使用Vector4爲我的顏色信息。如果紋理的SurfaceFormat也設置爲Vector4,則此功能起作用。