[vert.glsl]

#version 130

attribute vec3 in_Position;
attribute vec2 in_TexCoord;
varying vec2 pass_TexCoord;

uniform mat4 proj_matrix;
uniform mat4 view_matrix;
uniform mat4 model_matrix;

void main()
{
    gl_Position = proj_matrix * view_matrix * model_matrix
                * vec4(in_Position, 1.0);
    pass_TexCoord = in_TexCoord;
}

[frag.glsl]

#version 130

#if defined GL_ES
precision mediump float;
#endif

uniform sampler2D in_Texture;
varying vec2 pass_TexCoord;

void main()
{
    vec4 col = texture2D(in_Texture, pass_TexCoord);
//    vec4 col = vec4(0.5, 1.0, 0.0, 0.5);
//    vec4 col = vec4(pass_TexCoord * 4.0, 0.0, 0.25);

#if 0
    float mul = 2.0;
#   if 1
    vec2 d1 = mod(vec2(gl_FragCoord), vec2(2.0, 2.0));
    float t1 = mod(3.0 * d1.x + 2.0 * d1.y, 4.0);
    float dx2 = mod(floor(gl_FragCoord.x * 0.5), 2.0);
    float dy2 = mod(floor(gl_FragCoord.y * 0.5), 2.0);
    float t2 = mod(3.0 * dx2 + 2.0 * dy2, 4.0);
    float dx3 = mod(floor(gl_FragCoord.x * 0.25), 2.0);
    float dy3 = mod(floor(gl_FragCoord.y * 0.25), 2.0);
    float t3 = mod(3.0 * dx3 + 2.0 * dy3, 4.0);
    t1 = (1.0 + 16.0 * t1 + 4.0 * t2 + t3) / 65.0;
    t2 = t1;
    t3 = t1;
#   else
    float rand = sin(gl_FragCoord.x * 1.23456) * 123.456
               + cos(gl_FragCoord.y * 2.34567) * 789.012;
    float t1 = mod(sin(rand) * 17.13043, 1.0);
    float t2 = mod(sin(rand) * 27.13043, 1.0);
    float t3 = mod(sin(rand) * 37.13043, 1.0);
#   endif
    float fracx = fract(col.x * mul);
    float fracy = fract(col.y * mul);
    float fracz = fract(col.z * mul);
    fracx = fracx > t1 ? 1.0 : 0.0;
    fracy = fracy > t2 ? 1.0 : 0.0;
    fracz = fracz > t3 ? 1.0 : 0.0;
    col.x = (floor(col.x * mul) + fracx) / mul;
    col.y = (floor(col.y * mul) + fracy) / mul;
    col.z = (floor(col.z * mul) + fracz) / mul;
#endif
    gl_FragColor = col;
}

[vert.hlsl]

void main(float4 in_Position : POSITION,
          float2 in_TexCoord : TEXCOORD0,
          uniform float4x4 proj_matrix,
          uniform float4x4 view_matrix,
          uniform float4x4 model_matrix,
          out float2 out_TexCoord : TEXCOORD0,
          out float4 out_Position : POSITION)
{
    out_Position = mul(proj_matrix, mul(view_matrix, mul(model_matrix, in_Position)));
    out_TexCoord = in_TexCoord;
}

[frag.hlsl]

void main(float2 in_TexCoord : TEXCOORD0,
#if 0
          float4 in_FragCoord : WPOS,
#endif
          uniform sampler2D tex,
          out float4 out_FragColor : COLOR)
{
    float4 col = tex2D(tex, in_TexCoord);
#if 0
    float mul = 2.0;
    float t1, t2, t3;
#   if 1
    float dx1 = frac(in_FragCoord.x * 0.5) * 2.0;
    float dy1 = frac(in_FragCoord.y * 0.5) * 2.0;
    t1 = frac((3.0 * dx1 + 2.0 * dy1) / 4.0) * 4.0;
    float dx2 = frac(floor(in_FragCoord.x * 0.5) * 0.5) * 2.0;
    float dy2 = frac(floor(in_FragCoord.y * 0.5) * 0.5) * 2.0;
    t2 = frac((3.0 * dx2 + 2.0 * dy2) / 4.0) * 4.0;
    float dx3 = frac(floor(in_FragCoord.x * 0.25) * 0.5) * 2.0;
    float dy3 = frac(floor(in_FragCoord.y * 0.25) * 0.5) * 2.0;
    t3 = frac((3.0 * dx3 + 2.0 * dy3) / 4.0) * 4.0;
    t1 = (1.0 + 4.0 * t1 + t2) / 17.0;
    t2 = t1;
    t3 = t1;
#   else
    float rand = sin(in_FragCoord.x * 1.23456) * 123.456
               + cos(in_FragCoord.y * 2.34567) * 789.012;
    t1 = frac(sin(rand) * 17.13043);
    t2 = frac(sin(rand) * 27.13043);
    t3 = frac(sin(rand) * 37.13043);
#   endif
    float fracx = frac(col.x * mul);
    float fracy = frac(col.y * mul);
    float fracz = frac(col.z * mul);
    fracx = fracx > t1 ? 1.0 : 0.0;
    fracy = fracy > t2 ? 1.0 : 0.0;
    fracz = fracz > t3 ? 1.0 : 0.0;
    col.x = (floor(col.x * mul) + fracx) / mul;
    col.y = (floor(col.y * mul) + fracy) / mul;
    col.z = (floor(col.z * mul) + fracz) / mul;
#endif
    out_FragColor = col;
}

