2

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

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

如果 OpenGL 没有检测到这一点,通过 glGet* 获取对象名称并与您尝试绑定的对象进行比较或自己跟踪当前绑定的对象是否可能更快?

4

2 回答 2

2

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

于 2012-09-24T06:16:41.293 回答
0

通常,当您启用某些内容时,您需要在不需要它之后将其禁用。因此答案是:您必须跟踪程序中所做的事情。

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

glEnable(GL_TEXTURE_2D);
glBindTexture( 0, id );
// render
glDisable(GL_TEXTURE_2D);
于 2012-09-24T06:15:27.737 回答