GLSL version of GPUPicker’s fragment shader doesn’t specify precision of int, which causes on some mobile devices (Samsung Galaxy ones, A36 in particular, and according to some of my research, probably, Pixel phones too, but not iPhones) to pass blue component into red component with 16-bit shift. For example, mesh referenced by id 4 will be stored as [4,0,4] instead of [0,0,4] and thus not dereferenced back correctly.
I don’t have an ideal reproducable code, but here is something I’ve tried to do to show shader mismatch.
https://playground.babylonjs.com/#ZZW2I4#2
Here three planes should all be blue on PC - first one with mediump int, second with highp int, and third with float representation (like used for WebGL1 devices), and on 16-bit mediump int devices left one should be magenta.
The easiest solution, in my opinion, is to add precision highp int; for WebGL2 devices at the start of the shader
