diff --git a/effects/blur/blurshader.cpp b/effects/blur/blurshader.cpp --- a/effects/blur/blurshader.cpp +++ b/effects/blur/blurshader.cpp @@ -91,14 +91,15 @@ streamFragDown << "void main(void)\n"; streamFragDown << "{\n"; streamFragDown << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; + streamFragDown << " const vec4 powVal = vec4(2, 2, 2, 2);\n"; streamFragDown << " \n"; - streamFragDown << " vec4 sum = " << texture2D << "(texUnit, uv) * 4.0;\n"; - streamFragDown << " sum += " << texture2D << "(texUnit, uv - halfpixel.xy * offset);\n"; - streamFragDown << " sum += " << texture2D << "(texUnit, uv + halfpixel.xy * offset);\n"; - streamFragDown << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset);\n"; - streamFragDown << " sum += " << texture2D << "(texUnit, uv - vec2(halfpixel.x, -halfpixel.y) * offset);\n"; + streamFragDown << " vec4 sum = pow(" << texture2D << "(texUnit, uv) * 4.0, powVal);\n"; + streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv - halfpixel.xy * offset), powVal);\n"; + streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv + halfpixel.xy * offset), powVal);\n"; + streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset), powVal);\n"; + streamFragDown << " sum += pow(" << texture2D << "(texUnit, uv - vec2(halfpixel.x, -halfpixel.y) * offset), powVal);\n"; streamFragDown << " \n"; - streamFragDown << " " << fragColor << " = sum / 8.0;\n"; + streamFragDown << " " << fragColor << " = sqrt(sum) / 4.6;\n"; streamFragDown << "}\n"; streamFragDown.flush(); @@ -111,17 +112,18 @@ streamFragUp << "void main(void)\n"; streamFragUp << "{\n"; streamFragUp << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; + streamFragUp << " const vec4 powVal = vec4(2, 2, 2, 2);\n"; streamFragUp << " \n"; - streamFragUp << " vec4 sum = " << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset);\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset);\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset);\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset);\n"; - streamFragUp << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; + streamFragUp << " vec4 sum = pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset), powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset), powVal);\n"; + streamFragUp << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; streamFragUp << " \n"; - streamFragUp << " " << fragColor << " = sum / 12.0;\n"; + streamFragUp << " " << fragColor << " = sqrt(sum) / 4.35;\n"; streamFragUp << "}\n"; streamFragUp.flush(); @@ -161,17 +163,18 @@ streamFragNoise << "{\n"; streamFragNoise << " vec2 uv = vec2(gl_FragCoord.xy / renderTextureSize);\n"; streamFragNoise << " vec2 uvNoise = vec2((texStartPos.xy + gl_FragCoord.xy) / noiseTextureSize);\n"; + streamFragNoise << " const vec4 powVal = vec4(2, 2, 2, 2);\n"; streamFragNoise << " \n"; - streamFragNoise << " vec4 sum = " << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset);\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset);\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0;\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset);\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset);\n"; - streamFragNoise << " sum += " << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0;\n"; + streamFragNoise << " vec4 sum = pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset), powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0, powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset), powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset), powVal);\n"; + streamFragNoise << " sum += pow(" << texture2D << "(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0, powVal);\n"; streamFragNoise << " \n"; - streamFragNoise << " " << fragColor << " = sum / 12.0 - (vec4(0.5, 0.5, 0.5, 0) - vec4(" << texture2D << "(noiseTexUnit, uvNoise).rrr, 0));\n"; + streamFragNoise << " " << fragColor << " = sqrt(sum) / 4.35 - (vec4(0.5, 0.5, 0.5, 0) - vec4(" << texture2D << "(noiseTexUnit, uvNoise).rrr, 0));\n"; streamFragNoise << "}\n"; streamFragNoise.flush();