glGenerateMipmap()在三星Galaxy SII(Mali-400 MP)上非常慢

时间:2012-02-15 15:54:18

标签: android opengl-es-2.0 galaxy mali

我目前正在使用Android NDK和OpenGL ES 2.0在三星Galaxy SII(ARM Mali-400 MP)上做一些GPGPU。为此,我需要从已通过FBO渲染的纹理生成mipmap。不幸的是,glGenerateMipmap()似乎在设备上非常慢。生成512x512 RGBA8888纹理的mipmap大约需要90毫秒。由于我也在其他Android设备上尝试了相同的代码,这个功能运行得更快(大约2毫秒),这种减速真的让我很困惑。我做错了什么或错过了什么吗?任何人都可以在具有ARM Mali GPU的设备上提供此案例的示例代码吗?

以下是我的代码的相关部分:

glGenTextures(1, &texId); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, texId); 

// Allocate graphics memory.
glTexImage2D(GL_TEXTURE_2D, 0, format, cols, rows, 0, format, type, NULL); 
// Allocate memory for mipmap. 
glGenerateMipmap(GL_TEXTURE_2D); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

// Create off-screen framebuffer object and attach the texture to it. 
glGenFramebuffers(1, &fboId); 
glBindFramebuffer(GL_FRAMEBUFFER, fboId); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0);

// Now render to that texture
...

// Generate MIP map.
glBindTexture(GL_TEXTURE_2D, texId);
glGenerateMipmap(GL_TEXTURE_2D);

1 个答案:

答案 0 :(得分:0)