gpt4 book ai didi

android - 绑定(bind) fbo 时是否需要每帧调用 glFramebufferTexture2D?

转载 作者:行者123 更新时间:2023-11-28 21:44:56 24 4
gpt4 key购买 nike

在每个并条机上,当我绑定(bind)一个 FBO 时,我应该调用

GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER,
GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D,
ResourceManager.windowTex[0], 0);

您是否应该只在初始化帧缓冲区或每一帧时调用它?除非我在 glBindFramebuffer 之后调用它,否则它不会为我绘制。

最佳答案

附件绑定(bind)是 FBO 状态的一部分。在绑定(bind) FBO 时,您只需调用一次 glFramebufferTexture2D()。当您稍后再次绑定(bind)相同的 FBO 时,这些相同的纹理仍将附加。

一个可能的陷阱是,纹理对象必须先创建,然后才能附加到 FBO。仅生成名称是不够的,它需要至少绑定(bind)一次才能创建实际的纹理对象。例如,以下将是一个错误:

GLuint texId = 0;
glGenTextures(1, &texId);

GLuint fboId = 0;
glGenFramebuffers(1, &fboId);
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0);

glBindTexture(GL_TEXTURE_2D, texId);
glTexImage2D(...);

在这种情况下,纹理对象在附加到 FBO 之前并未创建。另一方面,以下是有效的:

GLuint texId = 0;
glGenTextures(1, &texId);
glBindTexture(GL_TEXTURE_2D, texId);
glBindTexture(GL_TEXTURE_2D, 0);

GLuint fboId = 0;
glGenFramebuffers(1, &fboId);
glFramebufferTexture2D(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0);

glBindTexture(GL_TEXTURE_2D, texId);
glTexImage2D(...);

请注意,当 glFramebufferTexture2D() 被调用时,纹理当前不必绑定(bind),并且此时也没有必要指定纹理数据。它只需要至少绑定(bind)一次即可触发纹理对象的创建。

关于android - 绑定(bind) fbo 时是否需要每帧调用 glFramebufferTexture2D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30554008/

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