我目前正在做一些GPGPU的三星Galaxy SII (ARM马里-400MP)与Android NDK和OpenGL ES 2.0。为此,我需要从通过FBO渲染到的纹理生成mipmap。不幸的是,glGenerateMipmap()在设备上似乎非常慢。为512x512 RGBA8888纹理生成mipmap大约需要90毫秒。由于我也在其他Android设备上尝试了相同的代码,这个功能的运行速度要快得多(大约2毫秒),这种速度的减慢真的让我感到困惑。我是不是做错了什么或者遗漏了什么?有没有人能提供这种情况下的示例代码,可以在带有ARM马里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);发布于 2012-11-26 21:56:11
此问题已由ARM在驱动程序中修复:http://forums.arm.com/index.php?/topic/15727-glgeneratemipmap-very-slow-on-samsung-galaxy-sii
https://stackoverflow.com/questions/9296619
复制相似问题