Is there a PRNG algorithm that allows to switch between states directly, not calling next()? Basically I need a function with the following interface: 

getRandomBytes(uint128 seed, uint64 state, uint16 byteCount)


Consecutive calls with the same seed and state must give the same results.

What algorithm should I look at?
Probably the easiest one with regards to the protocol is a XOF, an eXtendable Output Function. Two have been defined as part of SHA-3, called SHAKE-128 and SHAKE-256. These have a single input of any length, and can output as many bytes as required.

Of course SHA-3 is relatively new, so not all runtimes / API's may support the SHAKE variants out of the box.



In your case you would feed it the 128 bit seed concatenated with the 64 bit state. There should be no need for two separate variables.