Opengl glFramebufferTexture的TextTarget参数的要点是什么?
根据,对Opengl glFramebufferTexture的TextTarget参数的要点是什么?,opengl,Opengl,根据,对glFramebufferTexture的调用应类似于: glFramebufferTexture2D(GL_帧缓冲区、GL_颜色附件0、GL_纹理2D、textureId、0) 如果API已经知道textureId,为什么还需要知道目标(GL\u TEXTURE\u 2D)?这是否意味着应该在调用之前绑定纹理?i、 e.我是否需要打电话: glBindTexture(GL_TEXTURE_2D, textureId); glFramebufferTexture2D(GL_FRAMEBU
glFramebufferTexture
的调用应类似于:
glFramebufferTexture2D(GL_帧缓冲区、GL_颜色附件0、GL_纹理2D、textureId、0)代码>
如果API已经知道textureId
,为什么还需要知道目标(GL\u TEXTURE\u 2D
)?这是否意味着应该在调用之前绑定纹理?i、 e.我是否需要打电话:
glBindTexture(GL_TEXTURE_2D, textureId);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
glBindTexture(GL_TEXTURE_2D, 0);
还是将glFramebufferTexture2D
处理所有事情?因为愚蠢而存在
请参见,将附加到FBO的方法是使用一个立方体贴图面纹理目标。因此,如果要附加立方体贴图的+X面,可以使用GL\u纹理\u立方体\u贴图\u正X代码>目标。纹理的绑定目标(如果要绑定它)将是GL\u texture\u CUBE\u MAP
,但这不是要将面附加到FBO时传递给textarget
这是愚蠢的,因为OpenGL还提供了函数,它不接受textarget
参数。它仅从对象正确识别纹理的类型。它适用于三维纹理、一维和二维阵列,甚至。但它不适用于非数组立方体贴图;您仍然必须将愚蠢的glFramebufferTexture2D
与愚蠢的textarget
参数一起使用
当然,您应该使用的功能只有glFramebufferTextureLayer
和glFramebufferTexture
。但由于glFramebufferTextureLayer
无法在非数组立方体贴图面上工作,因此必须对非数组立方体贴图的面使用glFramebufferTexture2D
多亏了(以及OpenGL4.5),这种白痴不再适用glFramebufferTextureLayer
现在可以在非数组立方体贴图面上使用,因此现在没有任何基于维度的FramebufferTexture
函数。因此,没有指向textTarget
的意思,那么你是说我应该停止使用glFramebufferTexture2D
而开始使用glFramebufferTextureLayer
?而且我不需要担心在通话前后绑定纹理?@MarkIngram:我修改了最后一句,让它更清晰。我对目标为何存在的解释应该清楚地表明,不需要绑定纹理;我不知道你是怎么想到这个主意的。谢谢Nicol,我使用纹理作为GPGPU操作的输出,所以不会处理立方体贴图。我是从苹果的一些示例代码中得到这个想法的,但可能是他们在使用纹理时没有解除绑定。你也可以使用glTextureView
+glFramebufferTexture
(只需使用glTexStorage*
创建原始纹理存储)从GL 4.3而不是从glFramebufferTexture2D
或glFramebufferTextureLayer
将纹理的单层绑定到帧缓冲区。