// (c) 2008 OpenTK.net uniform sampler1D COLORTABLE; uniform float CETX; uniform float CETY; uniform float SCALINGX; uniform float SCALINGY; const int MAXIterations = 16; // *must* be > 0 void main(void) { float XPos = gl_FragCoord.x / SCALINGX - 1.6; float YPos = gl_FragCoord.y / SCALINGY - 1.6; float XQuad = pow( XPos, 2.0 ); float YQuad = pow( YPos, 2.0 ); int TableIndex = -1; int LoopCount = 0; while ( LoopCount <= MAXIterations ) { YPos = 2.0 * XPos * YPos + CETY; XPos = XQuad - YQuad + CETX; XQuad = pow( XPos, 2.0 ); YQuad = pow( YPos, 2.0 ); TableIndex++; if ( (XQuad + YQuad) > 4.0 ) { // if (TableIndex == 0) // discard; LoopCount = MAXIterations; } LoopCount++; } float FinalTableIndex = float( TableIndex ) / float( MAXIterations ); gl_FragColor.rgb = vec3( FinalTableIndex ); // outputs greyscale // gl_FragColor = texture1D( COLORTABLE, FinalTableIndex ); // outputs color }