- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我注意到有些人选择将默认纹理绑定(bind)到他们在每个渲染循环中使用的每个纹理单元。这是常见/最佳做法吗?
伪例子:
Tick() {
glUseProgram(someProgram);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, imgTexture1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, imgTexture2);
.
.
.
//Is the following really necessary: ???
glUseProgram(0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);
}
如果这里不需要,那么是否应该在释放资源之前进行此类调用?
最佳答案
这对于删除对象不是必需的。当您删除一个对象时,它会自动从每个绑定(bind)点解除绑定(bind)。这仅适用于发出 glDelete*
命令的上下文;共享对该对象的访问的其他上下文不会将其解除绑定(bind)。如果该对象附加到另一个对象(例如附加到帧缓冲区的纹理),那么它也不会取消附加。
自行清理是个不错的主意,主要是为了避免错误。如果着色器试图访问绑定(bind)了某些东西的纹理单元,它可能会“工作”,从而隐藏错误。然而,如果它试图访问一个没有任何绑定(bind)的单元,它很可能会明显失败。
当然,这主要是为了调试,因此您可以#ifdef
围绕此类代码以在发布版本中将其删除。
但是,以上内容假设您在完成渲染后基本上解除绑定(bind)纹理。我提出这个问题是因为您显示的与每个纹理单元解除绑定(bind)的代码不正确。为什么?
因为每个纹理单元都有多个 绑定(bind)点,每个类型 纹理对应一个绑定(bind)点。因此,如果您将纹理绑定(bind)到 GL_TEXTURE_CUBE_MAP
,调用 glBindTexture(GL_TEXTURE2D, 0)
不会对绑定(bind)到立方体贴图目标的纹理执行任何操作。
因此,如果您要编写从每个纹理单元解除绑定(bind)纹理的代码,则必须使用 every texture target that exists 调用 glBindTexture
:
void UnbindFromTextureUnit(int unit)
{
static const GLenum allTargets[] = {/*Every texture target that exists*/};
glActiveTexture(GL_TEXTURE0 + unit);
for(auto target : allTargets)
glBindTexture(target, 0);
}
或者您可以使用 multibind glBindTextures
from GL 4.4 .或者直接状态访问 4.5 glBindTextureUnit()
。
关于c++ - OpenGL - 绑定(bind)到默认纹理的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43377182/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!