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

标签 opengl

根据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/

相关文章:

c++ - 碰撞检测后更改背景颜色?

opengl - 现代游戏和其他 3D 应用程序的透明度

c++ - SFML 模糊着色器显示无效果

c++ - 在 OpenGL 中将纹理传递给着色器

c - OpenGL绘制凹多边形(错误)

opengl - FreeGLUT编译dll+lib?

java - 如何在JOGL中静态使用GL对象?

c++ - 四边形上的 OpenGL 纹理未对齐

c - 在 Aero 窗口中禁用垂直同步

math - GLSL |广告牌着色器,保持缩放