【发布时间】:2020-06-14 11:16:06
【问题描述】:
我正在寻找glActiveTexture(...) 和glBindTexture(...) 之间的关系,我找到了awesome answer here,最重要的答案(作者/用户 Alfonse)为我们提供了两个函数如何运行的伪代码,我最了解其中。但是,在其中,他在这样的电话中提到:
glActiveTexture(GL_TEXTURE0 + 5);
glBindTexture(GL_TEXTURE_2D, object);
glTexImage2D(GL_TEXTURE_2D, ...);
但通常将纹理绑定到上下文只是为了上传一些数据或修改它。此时绑定到哪个纹理单元并不重要,因此无需设置当前纹理单元。 glTexImage2D 不关心当前活动纹理是 0、1、40 还是其他。
所以我的问题是: 当生成两个纹理时,我们会这样做:
glGenTextures(1, &texture1);
glBindTexture(GL_TEXTURE_2D, texture1);
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glGenTextures(1, &texture2);
glBindTexture(GL_TEXTURE_2D, texture2);
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
//some more code
//inside the render loop
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
glDrawElements(...); glSwapBuffers();
//end of render loop
注意,在渲染循环之前的代码中,我使用了两个纹理glBindTexture(...),而没有调用glActiveTexture(...)。由于默认的活动纹理单元是:GL_TEXTURE0,这是否意味着为texture1 设置的参数被texture2覆盖?
【问题讨论】: