Look, if it works for you and you're happy with it - keep it. More power to you.
I just know that if I handed over something with such shoddy soldering to a customer, I'd lose my job or at the very least lose soldering privileges. But I am working with things that cost slightly more than 99$ that you can't find on store shelves :)
Entities that can't be picked, don't write to the texture, entities that can be picked, write to the texture their id. Whatever is closer to the camera will be the id that stays there (same as a color pixel, but instead of the object color you can think object id).
So you are limited at one ID per pixel, but for me that works.
Right, it's the same z-buffer problem of deciding what pixel color is visible, with a non-blending buffer update mode.
To be totally coherent, you have to draw the entity ID in the same order you would draw the visible color, in cases where entities could "tie" at the same depth.
I assume for the picking system you're rendering each entity/block as a different color (internally) and getting the pixel color under the mouse cursor?
"Color" is pretty much just "integer" to the GPU. It doesn't care if the 32-bit value a shader is writing to its output buffer is representing RGBA or a memory pointer.
I played lots of quake2-3 but that wasn't the golden age. Now you have even better selection for competitive gaming, like CS Go, valorant with their 128 ticks/s servers.