渲染导致低帧率时使用多个纹理

时间:2012-02-14 03:31:30

标签: iphone ios opengl-es

我尝试使用不同的方式来渲染游戏。首先,我创建一些纹理并上传到GPU。

void initialize(float width,float height)
{
    for(int i = 0;i < 10;i++)
    {
        glActiveTexture(GL_TEXTURE1 + i);
        GLuint gridTexture;
        glGenTextures(1, &gridTexture);
        glBindTexture(GL_TEXTURE_2D, gridTexture);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

        setPngTexture(gameMap->texture);
        glGenerateMipmap(GL_TEXTURE_2D);
    }
}

然后我在每帧中渲染时使用纹理。

void render() const
{
   for(int i = 0; i < map -> maps.size();i++)
   {
      glUniform1i(uniforms.Sampler,i);
      glBindBuffer(GL_ARRAY_BUFFER, gameMap -> verticesbuffer);
      glVertexAttribPointer(position, 3, GL_FLOAT, GL_FALSE, stride, 0);
      glVertexAttribPointer(normal, 3, GL_FLOAT, GL_FALSE, stride, offset);
      glVertexAttribPointer(texture, 2, GL_FLOAT, GL_FALSE, stride, texCoordOffset);
      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gameMap -> indicesbuffer);
      glDrawElements(GL_TRIANGLES, gameMap -> indexCount, GL_UNSIGNED_SHORT, 0);
   }

}

代码在iPhone模拟器上正常工作,但是当我在设备上测试应用程序时,它给我一个非常低的帧速率:2fps。如果我将行glUniform1i(uniforms.Sampler,i);更改为glUniform1i(uniforms.Sampler,0);该应用正常工作!

我是OpenGL ES的新生,我不确定我是否以正确的方式使用多个纹理。谁可以告诉我这个问题的原因是什么,我该如何纠正?非常感谢!

1 个答案:

答案 0 :(得分:0)

有很多事情可能会出错。您没有提供足够的代码来真正诊断问题(着色器源)。我首先要移动glUniform1i(uniforms.Sampler,i);你的循环之外。你正在使用它的方式没有任何意义(基本上你正在尝试将uniforms.Sampler绑定到你的着色器中的第n个值为map.size()。我很确定这会导致大量的OpenGL错误。 - 阅读glUniform1i上的文档