… on adreno devices When the texture cache is grown we allocate a larger texture array then copy each layer of the old array in to the new one. To perform this copy we use use glBlitFramebuffer, with the read and draw framebuffers bound to the correct layer in the old and new textures. Unfortunately on Adreno devices this does not work. glBlitFramebuffer always writes to the 0th layer of the texture bound to the draw framebuffer. glCopyTexSubImage3D also does not work correctly - it always reads from the 0th layer of the texture bound to the read framebuffer. As a workaround, we use glBlitFramebuffer to blit from the old texture in to a temporary renderbuffer, then use glCopyTexSubImage3D to copy from that renderbuffer to the new texture.