Why async _readTexturePixels uses synchronous version of readTexturePixels?

4K texture read executed 10x

16K texture read executed 10x

16K texture read executed 10x - no data conversion

I’ve experimented with double buffered PBOs too and ran a bunch of other tests with various code I found in articles dealing with pixel reading from the GPU/various settings (perf measures not presented here).

My conclusion is that true async read is much more performat w/o data conversion in all cases. With data conversion the sync read is very slightly performant in most scenarios. As we almost always require data conversion (do we?) it seems we don’t need to touch the current implementation and the Promise wrapper is a good solution. EDIT: I’m doing some more experiments and starting to be unsure about this paragraph.

Contrary to all the test results I’m not sure whether I could measure the async version correctly:

@Deltakosh I’m still convinced we should give the user the ability to choose from sync or real async pixel reads.