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_COMPONENT16,的组合GL_DEPTH_COMPONENT24_OESGL_DEPTH_COMPONENT32_OES但这些都不起作用(也支持 GL_OES_depth24)

4

2 回答 2

2

你不能。具有深度内部格式的纹理只能附加到深度附件。具有颜色内部格式的纹理只能附加到颜色附件。

于 2013-04-24T15:24:15.093 回答
0

正如前面提到的答案,您不能将具有深度格式的纹理附加为颜色表面。现在看看您的评论,您真的是在渲染为 1 通道浮点格式之后。

您可以查看http://www.khronos.org/registry/gles/extensions/OES/OES_texture_float.txt,它允许您拥有浮点格式的纹理格式。

然后,您可以将纹理初始化为仅包含 1 个通道的 Alpha 贴图。

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, ImageSize.Width, ImageSize.Height, 0, GL_ALPHA, GL_FLOAT, 0);

这可能会也可能不会起作用,具体取决于您的设备支持的扩展。

于 2014-06-18T02:17:12.020 回答