Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl glFramebufferTexture的TextTarget参数的要点是什么?_Opengl - Fatal编程技术网

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
将纹理的单层绑定到帧缓冲区。