根据http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferTexture.xml ,调用glFramebufferTexture
应该类似于:glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
如果 API 已经知道 textureId
为什么它也需要知道目标( GL_TEXTURE_2D
)?这是否意味着应该在此调用之前绑定(bind)纹理?即我是否需要调用:
glBindTexture(GL_TEXTURE_2D, textureId);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
glBindTexture(GL_TEXTURE_2D, 0);
或将
glFramebufferTexture2D
处理一切?
最佳答案
它在那里是因为愚蠢。
看,你附加 face of a cubemap 的方式FBO 是使用立方体贴图面纹理目标之一。因此,如果要附加立方体贴图的 +X 面,请使用 GL_TEXTURE_CUBE_MAP_POSITIVE_X
目标。纹理的绑定(bind)目标(如果您正在绑定(bind)它)将是 GL_TEXTURE_CUBE_MAP
,但这不是您传递给 textarget
的内容当您想将人脸附加到 FBO 时。
这很愚蠢,因为 OpenGL 还提供了 glFramebufferTextureLayer
函数,它不需要 textarget
范围。它仅从对象中正确识别纹理的类型。它适用于 3D 纹理、1D 和 2D 数组,甚至 cubemap array textures .但它不适用于非数组立方体贴图;你还是得用傻glFramebufferTexture2D
很傻textarget
范围。
所有权利,您应该使用的唯一功能是 glFramebufferTextureLayer
和 glFramebufferTexture
.但是因为如何glFramebufferTextureLayer
不适用于非数组立方体贴图面,您必须使用 glFramebufferTexture2D
对于非数组立方体贴图的面。
感谢 ARB_direct_state_access (因此 OpenGL 4.5),这种白痴不再适用。 glFramebufferTextureLayer
现在可以在非数组立方体贴图面上使用,所以现在没有指向任何基于维度的FramebufferTexture
职能。因此,没有意义 textarget
.
关于opengl - glFramebufferTexture 的 textarget 参数有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092075/