优化iPhone上的opengles纹理交换

时间:2010-04-21 10:57:18

标签: iphone performance optimization opengl-es textures

我有2个1024x1024精灵表,一个包含几个480x320背景图像,另一个包含各种较小的元素作为实体和界面。每当我进入一个场景时,我的帧速率会像岩石一样下降,我必须从两个纹理中显示精灵(迫使我每帧重新绑定两次,界面纹理 - > bg纹理 - >界面纹理)。

- (void)setCurrentTexture:(int)texID{
 if(currentTex == texID)
  return;
 else
  currentTex = texID;

 // Bind the texture name. 
 glBindTexture(GL_TEXTURE_2D, [Graphics getTexture:texID]);
 // Speidfy a 2D texture image, provideing the a pointer to the image data in memory
 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, [Graphics getTexWidth:texID], [Graphics getTexHeight:texID], 0, GL_RGBA, GL_UNSIGNED_BYTE, [Graphics getTexData:texID]);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}

我交换纹理的方式有问题吗?

编辑:我删除了我一直在制作的状态变化的一半。删除上述3中的任何一个导致我的多边形没有任何纹理(即显示为白色)。最大的击球手是glTexImage2D ...但是试图将它设置在其他地方(例如,在初始化)最终我的模型/四边形根本没有纹理。

1 个答案:

答案 0 :(得分:0)

除非您正在更新纹理中的数据,否则应该在应用程序启动时为每个纹理调用glTexImage2D一次。