根据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
)?这是否意味着在此调用之前应该绑定纹理?即我需要打电话:
glBindTexture(GL_TEXTURE_2D, textureId);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
glBindTexture(GL_TEXTURE_2D, 0);
或者glFramebufferTexture2D
会处理所有事情吗?
答案 0 :(得分:14)
因为愚蠢而存在。
请参阅将face of a cubemap附加到FBO的方法是使用立方体贴图面纹理目标之一。因此,如果要绑定立方体贴图的+ X面,则使用GL_TEXTURE_CUBE_MAP_POSITIVE_X
目标。纹理的绑定目标(如果你绑定它)将是GL_TEXTURE_CUBE_MAP
,但当你想要将一个面附加到FBO时,不你传递给textarget
的内容。< / p>
这是愚蠢的,因为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
没有意义。