我目前正在使用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);
答案 0 :(得分:0)