gpt4 book ai didi

c++ - opengl - glBindTexture 是否覆盖事件纹理单元的内容

转载 作者:行者123 更新时间:2023-12-02 09:48:43 24 4
gpt4 key购买 nike

我正在寻找 glActiveTexture(...) 之间的关系和 glBindTexture(...)我找到了 awesome answer here ,最重要的答案(作者/用户 Alfonse)为我们提供了一个伪代码,说明这两个函数的行为方式,我理解了其中的大部分内容。但是,在其中,他在这样的电话中提到:

glActiveTexture(GL_TEXTURE0 + 5);
glBindTexture(GL_TEXTURE_2D, object);
glTexImage2D(GL_TEXTURE_2D, ...);

but one often binds a texture to the context just to upload some data or to modify it. It doesn’t matter at that point which texture unit you bind it to, so there’s no need to set the current texture unit. glTexImage2D doesn’t care if the current active texture is 0, 1, 40, or whatever.



所以我的问题是:
当生成两个纹理时,我们会这样做:
 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 覆盖?

最佳答案

不,纹理参数(由 glTexParameter 设置)是为特定纹理(当前绑定(bind)到事件纹理单元的纹理)设置的,而不是为纹理单元(不是 GL_TEXTUREi 之一)设置的。

请注意,您使用 glTextureParameteri不正确。而不是 GL_TEXTURE_2D ,它需要一个纹理句柄,由 glGenTextures 返回1. 你把它和 glTexParameteri 混淆了, 确实可以用 GL_TEXTURE_2D 调用.

1 正如@derhass 所述,glGenTextures (与 glCreateTextures 不同)仅保留句柄。仅当您将其传递给 glBindTexture 时才会创建具有此句柄的纹理。 .用glTexParameter没关系, 但如果你想使用 glTextureParameteri和其他直接在纹理句柄上操作的函数,它可能很重要。

关于c++ - opengl - glBindTexture 是否覆盖事件纹理单元的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62371756/

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