//// Image //// set these settings: //// - iChannel0 = Buffer A //// - iChannel1 = Image of choice #define IMGCHANNEL iChannel1 //======Start shared code for state #define pz_stateYOffset 0.0 #define pz_stateBuf 0 #define pz_stateSample(x) texture(iChannel0,x) vec2 pz_realBufferResolution; vec2 pz_originalBufferResolution; void pz_initializeState() { pz_realBufferResolution = iChannelResolution[pz_stateBuf].xy; pz_originalBufferResolution = pz_stateSample(.5/pz_realBufferResolution).xy; } vec2 pz_nr2vec(float nr) { return vec2(mod(nr, pz_originalBufferResolution.x) , pz_stateYOffset+floor(nr / pz_originalBufferResolution.x))+.5; } vec4 pz_readState(float nr) { return pz_stateSample(pz_nr2vec(nr)/pz_realBufferResolution); } float pz_resetCount() { return pz_readState(1.).z; } vec3 pz_position() { return pz_readState(3.).xyz; } vec2 pz_initializeState(vec2 fragCoord) { pz_initializeState(); vec3 position = pz_position(); fragCoord -= 0.5*iResolution.xy; fragCoord *= position.z; fragCoord += (0.5 + position.xy) * iResolution.xy ; return fragCoord; } //======End shared code for state void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 screenspace = fragCoord / iResolution.xy; fragCoord = pz_initializeState(fragCoord); vec2 uv = fragCoord; ivec2 size = textureSize(IMGCHANNEL, 0); float ratio = float(size.x) / float(size.y); uv.y /= float(iResolution.x)/float(iResolution.y); uv.y *= ratio; uv /= iResolution.xy; //size = ivec2(100, 100); ivec2 pixelf = ivec2(floor(uv * vec2(size))); ivec2 pixel = ivec2(floor(uv * vec2(size) - vec2(0.5, 0.5))); ivec2 px2 = pixel + ivec2(0, 1); ivec2 px3 = pixel + ivec2(1, 0); ivec2 px4 = pixel + ivec2(1, 1); vec2 pxcoordf = (vec2(pixelf) + vec2(0.5, 0.5)) / vec2(size); vec2 pxcoord = (vec2(pixel) + vec2(0.5, 0.5)) / vec2(size); vec2 pxcoord2 = (vec2(px2) + vec2(0.5, 0.5)) / vec2(size); vec2 pxcoord3 = (vec2(px3) + vec2(0.5, 0.5)) / vec2(size); vec2 pxcoord4 = (vec2(px4) + vec2(0.5, 0.5)) / vec2(size); vec4 colf = vec4(texture(IMGCHANNEL, pxcoordf).xyz,1.0); vec4 col1 = vec4(texture(IMGCHANNEL, pxcoord).xyz,1.0); vec4 col2 = vec4(texture(IMGCHANNEL, pxcoord2).xyz,1.0); vec4 col3 = vec4(texture(IMGCHANNEL, pxcoord3).xyz,1.0); vec4 col4 = vec4(texture(IMGCHANNEL, pxcoord4).xyz,1.0); vec4 actual = vec4(texture(IMGCHANNEL, uv).xyz,1.0); float min = 10000.0; vec4 final; float dist1 = distance(col1, actual); if(dist1 < min) {min = dist1; final = col1;} float dist2 = distance(col2, actual); if(dist2 < min) {min = dist2; final = col2;} float dist3 = distance(col3, actual); if(dist3 < min) {min = dist3; final = col3;} float dist4 = distance(col4, actual); if(dist4 < min) {min = dist4; final = col4;} //fragColor = actual.x > 0.5 ? vec4(1, 1, 1, 1) : vec4(0, 0, 0, 0); //fragColor = mix(final, actual, sin(iDate.w * 4.0) * 0.5 + 0.5 ); //fragColor = mix(col1, actual, sin(iDate.w * 4.0) * 0.5 + 0.5 ); //fragColor = mix(final, actual, -1.0 ); // looks interesting //fragColor = actual; //fragColor = col1; //fragColor = mix(final, actual, sin(iDate.w * 4.0) * 0.5 + 0.5 ); //fragColor = mix(col3, actual, sin(iDate.w * 4.0) * 0.5 + 0.5 ); if(screenspace.y < 0.33) { fragColor = colf; }else if(screenspace.y < 0.34) { fragColor = vec4(1.0, 1.0, 1.0, 1.0); }else if(screenspace.y < 0.66) { fragColor = actual; }else if(screenspace.y < 0.67) { fragColor = vec4(1.0, 1.0, 1.0, 1.0); }else{ fragColor = final; } //fragColor = vec4(screenspace, 0.0, 1.0); }