Opentk/Source/Examples/Data/Shaders/JuliaSet_SM3_FS.glsl
2008-04-13 16:52:15 +00:00

41 lines
No EOL
1.1 KiB
GLSL

#version 120
// www.OpenTK.net GLSL Julia Set (c) 2008 Christoph Brandtner
uniform sampler1D COLORTABLE;
uniform float CETX;
uniform float CETY;
uniform float SCALINGX;
uniform float SCALINGY;
uniform float OFFSETX;
uniform float OFFSETY;
const int MAXIterations = 32; // *must* be > 0
void main(void)
{
float XPos = gl_FragCoord.x / SCALINGX - OFFSETX;
float YPos = gl_FragCoord.y / SCALINGY - OFFSETY;
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 = texture1D( COLORTABLE, FinalTableIndex ); // lookup texture for output
// gl_FragColor.rgb = vec3( FinalTableIndex ); // Debug: output greyscale
}