nPOT textures can be swapped during the uploading process if the textures were already in Browser Cache.
Adding var _canvas in this line fixes it.
One more possible (unconfirmed) fix: use createImageBitmap on Image before doing the resize.
It seems that texImage2d somehow doesnt get update from that canvas in time.
Device: Huawei Nova
Android 7.0
Chrome 65.0.3325.109
Second Device: Meizu M2 Note
Android 5.1.1
Chrome 65.0.3325.109
PC (as reference)

Mobile (Huawei Nova) (bug)

Mobile (Huawei Nova) (bug)

Confirmed on my Moto G
It seems that texImage2d somehow doesn't get update from that canvas in time.
I'm not sure that is a three.js bug. When the call texImage2d() returns, WebGL ensures that you can reuse the given image/buffer without affecting the upload. If this is not the case, there is maybe a problem in the browser implementation.
BTW: I can't reproduce the error in Firefox (Android).
The implementation of makePowerOfTwo() was changed because it was not memory efficient to create a new canvas for each texture resize. So reintroducing var will also reintroducing the former memory related problems.
I can also reproduce this on windows with Chrome 66, but not with Firefox or Edge. Perhaps it's a bug in Chrome?
I think so. The behavior in Chrome does not conform to the standard. At least from my point of view...
Yep, this is Chrome bug, and was represented in raw openGl.
Test link: https://jsfiddle.net/6nLucq2y/9/, perhaps it's memory bug,
Can you please file a bug at? https://bugs.chromium.org/p/chromium/issues/list
You've already prepared a nice test case 馃槆
Ok, they fixed it even before we reported, its a duplicate of https://github.com/mrdoob/three.js/issues/13379
Most helpful comment
Ok, they fixed it even before we reported, its a duplicate of https://github.com/mrdoob/three.js/issues/13379