2012-01-20 85 views
0

我正在用OpenGL做一些GPGPU編程。「cast」GL_R8到GL_BGRA

我希望能夠將所有數據寫入格式爲GL_R8的一維紋理,這樣我基本上可以將其視爲std:array對象。

然後在渲染期間,我希望能夠設置GPU應該如何讀取圖像,例如,將其「投射」到1024x1024 BGRA。

這可能嗎?

例如我希望能夠做到:

gpu::array<uint8_t> data(GL_R8, width*height*4); 
gpu::bind(data, GL_TEXTURE0, gpu::format::bgra, width, height); 

回答

2

然後用buffer texture。沒有規則(我知道)說你不能將相同的緩衝區掛鉤到多個不同的紋理。這將允許一個紋理與GL_R8內部格式一起使用它。另一個紋理可以使用GL_RGBA8格式。

+0

難道他不能只是設置從R到RGBA紋理swizzle? 'glTexParameteri(GL_TEXTURE _...,GL_TEXTURE_SWIZZLE_ {R,G,B,A},GL_RED);' – datenwolf

+2

@datenwolf:那實際上不會做他想做的事。它會將紅色廣播給所有四個組件。他想要的是每四個連續的紅色成分變成RGBA成分。也就是說,要能夠一次寫入一個組件,但一次只能讀取四個組件。 –