2012-02-15 68 views
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); 

回答