1
我目前正在用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的設備上的這種情況提供示例代碼嗎?三星Galaxy SII(Mali-400 MP)上的glGenerateMipmap()速度很慢
這裏是我的代碼的相關部分:
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);