OpenGL 在已绑定时绑定



我正在用OpenGL 3.2+编写一个引擎。可渲染对象具有一个网格(又名 VAO)和几个材质(又名着色器和程序)。所有可渲染对象都存储在渲染队列中,该队列对材质和网格的渲染过程进行排序,从而需要最少的 OpenGL 绑定调用。

但是,有时它会绑定已经绑定的对象,

我的问题是:OpenGL 是否会自动检测您尝试绑定已绑定的对象,并且是否跳过所有昂贵的操作,或者您是否必须实现一个系统来检测对象是否已经绑定自己?

如果 OpenGL 没有检测到这一点,那么通过 glGet* 获取对象名称并与你尝试绑定的对象进行比较,还是只跟踪当前绑定的对象会更快?

我不认为规范需要执行这样的检查,但每个主要的实现都需要。但是,如果您决定自己做 - 为什么不自己存储值呢?glGet在这里没有特别的兴趣。顺便说一句,材质和着色器不是一回事。

通常,当您启用某些内容时,您需要在不需要它后禁用它。因此,答案是:您必须跟踪程序中完成的操作。

我能想到的最简单的例子是:

glEnable(GL_TEXTURE_2D);
glBindTexture( 0, id );
// render
glDisable(GL_TEXTURE_2D);

相关内容

最新更新