// #define G 1.22074408460575947536
// #define K 2 * SAMPLES * BOUNCES

// float calcN(int currentSampleIndex) {
//     return float(frameCounter * SAMPLES + currentSampleIndex);
// }

// // void R2_SEQUENCE(inout float[K] seq, float n, float shift) {
// //     for(int i = 0; i < K; i++) {
// //         float a_i = 1.0 / pow(G, i);
// //         seq[i] = fract(0.5 + a_i*n + shift);
// //     }
// // }

// // void R2_SEQUENCE(inout float[K] seq, vec4 shift) {
// //     float inv_g = 1.0/G;
// //     for(int s=0; s<SAMPLES; ++s) {
// //         float pw = 1.0;  
// //         float n = frameCounter * SAMPLES + s;
// //         for(int dim = 0; dim < 2*BOUNCES; dim++) {
// //             pw *= inv_g;
// //             seq[2*BOUNCES*s + dim] = fract(0.5 + pw*n + shift[dim % 4]);
// //         }
// //     }
// // }

// void R2_SEQUENCE(inout float[K] seq) {
//     float inv_g = 1.0/G;
//     for(int s=0; s<SAMPLES; ++s) {
//         float pw = 1.0;  
//         float n = frameCounter * SAMPLES + s;

//         int x1 = (int(gl_FragCoord.x) + int(0.754877669 * n * 512)) % 512;
//         int y1 = (int(gl_FragCoord.y) + int(0.569840296 * n * 512)) % 512;
//         vec4 shift = texelFetch(noisetex,  ivec2(x1,y1), 0);

//         for(int dim = 0; dim < 2*BOUNCES; dim++) {
//             pw *= inv_g;
//             seq[2*BOUNCES*s + dim] = fract(0.5 + pw*n + shift[dim % 4]);
//         }
//     }
// }

// /* The state word must be initialized to non-zero */
// uint xorshift32(uint state)
// /*
//     Used to advanced the xorshift state.
// */
// {
//     /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */
//     uint x = state;
//     x ^= x << 13u;
//     x ^= x >> 17u;
//     x ^= x << 5u;
//     return x;
// }

// float rand(inout uint state)
// /*
//     Advances the prng state and returns the corresponding random float.
// */
// {
//     uint x = xorshift32(state);
//     state = x;
//     return float(x)*uintBitsToFloat(0x2f800004u);
// }


// // void R2_SEQUENCE(inout float[K] seq) {
// //     float inv_g = 1.0/G;
// //     for(int s=0; s<SAMPLES; ++s) {
// //     float pw = 1.0;
// //     uint state = wang_hash(uint(gl_FragCoord.x + gl_FragCoord.y * resolution.x));  
// //     float n = frameCounter * SAMPLES + s;
// //     for(int dim = 0; dim < 2*BOUNCES; dim++) {
// //         float shift = rand(state);
// //         pw *= inv_g;
// //         seq[2*BOUNCES*s + dim] = fract(0.5 + pw*n + shift);
// //     }
// //     }
// // }
