From 42991c5fdfbefed468784249bdcd0af1a454b7f1 Mon Sep 17 00:00:00 2001 From: Cameron Taylor <cameron.taylor.ninja@gmail.com> Date: Sat, 20 Mar 2021 04:33:44 -0400 Subject: [PATCH] shader dumbshit in progress IGNORE FOR NOW! --- source/Note.hx | 14 +++++ source/shaderslmfao/ColorSwap.hx | 90 ++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 source/shaderslmfao/ColorSwap.hx diff --git a/source/Note.hx b/source/Note.hx index d979f75a6..9659ad3c0 100644 --- a/source/Note.hx +++ b/source/Note.hx @@ -1,9 +1,12 @@ package; +import flixel.FlxG; import flixel.FlxSprite; import flixel.graphics.frames.FlxAtlasFrames; import flixel.math.FlxMath; import flixel.util.FlxColor; +import flixel.util.FlxTimer; +import shaderslmfao.ColorSwap; using StringTools; @@ -101,6 +104,17 @@ class Note extends FlxSprite setGraphicSize(Std.int(width * 0.7)); updateHitbox(); antialiasing = true; + + var colorSwap = new ColorSwap(); + + // shader = colorSwap.shader; + + // colorSwap.colorToReplace = 0xFFF9393F; + // colorSwap.newColor = 0xFF00FF00; + + // color = FlxG.random.color(); + // color.saturation *= 4; + // replaceColor(0xFFC1C1C1, FlxColor.RED); } switch (noteData) diff --git a/source/shaderslmfao/ColorSwap.hx b/source/shaderslmfao/ColorSwap.hx new file mode 100644 index 000000000..4d2eac78e --- /dev/null +++ b/source/shaderslmfao/ColorSwap.hx @@ -0,0 +1,90 @@ +package shaderslmfao; + +import flixel.system.FlxAssets.FlxShader; +import flixel.util.FlxColor; + +class ColorSwap +{ + public var shader(default, null):ColorSwapShader; + public var colorToReplace(default, set):FlxColor; + public var newColor(default, set):FlxColor; + + public function new():Void + { + shader = new ColorSwapShader(); + shader.colorOld.value = []; + shader.colorNew.value = []; + } + + function set_colorToReplace(color:FlxColor):FlxColor + { + colorToReplace = color; + + shader.colorOld.value[0] = color.red; + shader.colorOld.value[1] = color.green; + shader.colorOld.value[2] = color.blue; + + return color; + } + + function set_newColor(color:FlxColor):FlxColor + { + newColor = color; + + shader.colorNew.value[0] = color.red; + shader.colorNew.value[1] = color.green; + shader.colorNew.value[2] = color.blue; + + return color; + } +} + +class ColorSwapShader extends FlxShader +{ + @:glFragmentSource(' + #pragma header + + uniform vec3 colorOld; + uniform vec3 colorNew; + uniform float u_time; + + vec3 normalizeColor(vec3 color) + { + return vec3( + color[0] / 255.0, + color[1] / 255.0, + color[2] / 255.0 + ); + } + + vec3 hueShift(vec3 color, float hue) { + const vec3 k = vec3(0.57735, 0.57735, 0.57735); + float cosAngle = cos(hue); + return vec3(color * cosAngle + cross(k, color) * sin(hue) + k * dot(k, color) * (1.0 - cosAngle)); + } + + + void main() + { + vec4 pixel = texture2D(bitmap, openfl_TextureCoordv); + + vec3 eps = vec3(0.02, 0.02, 0.02); + + vec3 colorOldNormalized = normalizeColor(colorOld); + vec3 colorNewNormalized = normalizeColor(colorNew); + + if (all(greaterThanEqual(pixel, vec4(colorOldNormalized - eps, 1.0)) ) && all(lessThanEqual(pixel, vec4(colorOldNormalized + eps, 1.0)) ) + ) + { + pixel = vec4(hueShift(colorOldNormalized, 0.7), 1.0); + } + + gl_FragColor = pixel; + } + + ') + public function new() + { + super(); + } +}