切换纹理时,为什么速度慢?
代码 - 1
glBindTexture(GL_TEXTURE_2D,texId01);
glDrawArray(glDrawArrays(GL_TRIANGLES,0,4);
glBindTexture(GL_TEXTURE_2D,texId02);
glDrawArray(glDrawArrays(GL_TRIANGLES,0,4);
代码 - 2
glBindTexture(GL_TEXTURE_2D,texId01);
glDrawArray(GL_TRIANGLES,0,4);
glDrawArray(GL_TRIANGLES,0,4);
为什么这些速度不同?
答案 0 :(得分:7)
对于PowerVR硬件上的OpenGLES,appraranty以及其他人来说,upvoted答案是错误的。我已经偶尔发现过这种“纹理绑定很慢”的神话,但没有一个性能文档(Apple或Imagination Technologies)提到这一点。
所以我直接用Imagination Technologies检查了这个,他们的回答是:
除了我们在文档中提到的内容之外,使用glBindTexture不会对性能产生任何影响,但是开销很小但不是很大。有些信息似乎提到纹理切换时使用glTexture2D重新加载纹理,这是一个缓慢的调用,应该只在第一次初始化应用程序时完成
答案 1 :(得分:3)
因为驱动程序必须进行一些内部验证,要检查一切是否符合预期,所以绑定纹理是一项昂贵的操作。
考虑到这一点,您应该最小化纹理绑定操作。一种常见的方法是在绘制时按纹理(以及着色器,如果GL ES 2.0)对基元进行排序。
答案 2 :(得分:1)
Shiva,bhai sun ..我知道你在游戏中有一些游戏
为什么你要问这样的问题,......如果它真的很慢,你能不能优化它, 喜欢因司机等而慢。?
尝试使用单个大纹理 使用单独的缓冲区对象来存储要在此纹理中使用的每个图像的坐标, 这就对了... 即使纹理切换很慢,你仍然领先,因为你使用单一纹理 以及你使用缓冲区的事实......