2013-04-24 44 views
1

我喜歡將深度紋理作爲顏色附件附加到幀緩衝區。 (我在iOS和支持GL_OES_depth_texture)作爲顏色附件的深度紋理

所以我設置這樣的結構:

glGenTextures(1, &TextureName); 
glBindTexture(GL_TEXTURE_2D, TextureName); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, ImageSize.Width, ImageSize.Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, 0); 


glGenFramebuffers(1, &ColorFrameBuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, ColorFrameBuffer); 

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, TextureName, 0); 

但現在,如果我檢查的幀緩衝狀態,我得到一個GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

我在做什麼這裏錯了嗎?

我也嘗試了一些組合,帶GL_DEPTH_COMPONENT16GL_DEPTH_COMPONENT24_OESGL_DEPTH_COMPONENT32_OES但這些非工作(GL_OES_depth24也支持)

+1

*「我在這做錯了什麼?」* - 完全是這樣的:*「我想將深度紋理作爲顏色附件附加到幀緩衝區。」*。 – 2013-04-24 15:32:46

回答

2

你不能。深度內部格式的紋理只能附加到深度附件。彩色內部格式的紋理只能附加到彩色附件。

+0

那麼有沒有可能寫入從片段着色器直接寫入浮動紋理? (當然,我可以使用半浮動擴展紋理,但這會給我一個開銷,因爲我只需要一個32位浮點/碎片,並將它分割成ARGB888非常不方便:-( – V1ru8 2013-04-24 16:12:39

+1

@ V1ru8:如果您問的是寫一個浮動紋理,你應該詢問*那*,而不是通過顏色附件寫入深度紋理。 – 2013-04-24 16:29:10

+0

嗯,我認爲這是如何做到這一點;-) – V1ru8 2013-04-24 21:48:34

0

如前面提到的答案,您不能將具有深度格式的紋理作爲顏色表面添加。現在看看你的評論,你真的在​​渲染成1通道浮點格式之後。

你可以看看http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt它允許你有一個紋理格式的浮動格式。

然後,您可以將紋理初始化爲Alpha圖,該圖只包含1個通道。 glDexImage2D(GL_TEXTURE_2D,0,GL_ALPHA,ImageSize.Width,ImageSize.Height,0,GL_ALPHA,GL_FLOAT,0);

這可能會也可能不會工作,具體取決於設備支持的擴展名。