gpt4 book ai didi

opengl - glFramebufferTexture 的 textarget 参数有什么意义?

转载 作者:行者123 更新时间:2023-12-04 00:54:38 25 4
gpt4 key购买 nike

根据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范围。

所有权利,您应该使用的唯一功能是 glFramebufferTextureLayerglFramebufferTexture .但是因为如何glFramebufferTextureLayer不适用于非数组立方体贴图面,您必须使用 glFramebufferTexture2D对于非数组立方体贴图的面。

感谢 ARB_direct_state_access (因此 OpenGL 4.5),这种白痴不再适用。 glFramebufferTextureLayer现在可以在非数组立方体贴图面上使用,所以现在没有指向任何基于维度的FramebufferTexture职能。因此,没有意义 textarget .

关于opengl - glFramebufferTexture 的 textarget 参数有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com