我喜欢将深度纹理作为颜色附件附加到帧缓冲区。 (我在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_COMPONENT16
,GL_DEPTH_COMPONENT24_OES
,GL_DEPTH_COMPONENT32_OES
的一些组合,但这些组合不起作用(也支持GL_OES_depth24)
答案 0 :(得分:2)
你做不到。具有深度内部格式的纹理只能附加到深度附件。具有彩色内部格式的纹理只能附加到颜色附件。
答案 1 :(得分:0)
如前所述,您无法将深度格式的纹理附加为颜色表面。现在看看你的评论,你真的在渲染到1通道浮动格式之后。
您可以查看http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt,它允许您使用浮点格式的纹理格式。
然后,您可以将纹理初始化为Alpha地图,该地图仅包含1个通道。
glTexImage2D(GL_TEXTURE_2D,0,GL_ALPHA,ImageSize.Width,ImageSize.Height,0,GL_ALPHA,GL_FLOAT,0);
根据设备支持的扩展程序,这可能有效,也可能无效。