Make smear cursor fade in, tweak some values, much less jarring now.
This commit is contained in:
parent
cca5c9f677
commit
ae37074ce4
1 changed files with 20 additions and 10 deletions
|
|
@ -64,9 +64,10 @@ vec4 saturate(vec4 color, float factor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 TRAIL_COLOR = iCurrentCursorColor;
|
vec4 TRAIL_COLOR = iCurrentCursorColor;
|
||||||
const float OPACITY = 0.325;
|
const float OPACITY = 0.3;
|
||||||
const float DURATION = 0.2; //IN SECONDS
|
const float DURATION = 0.3; //IN SECONDS
|
||||||
const float MAX_TRAIL_LENGTH = 0.6;
|
const float FADE_DURATION = 0.3;
|
||||||
|
const float MAX_TRAIL_LENGTH = 0.4;
|
||||||
const float TRAIL_HEIGHT_FACTOR = 0.4;
|
const float TRAIL_HEIGHT_FACTOR = 0.4;
|
||||||
|
|
||||||
void mainImage(out vec4 fragColor, in vec2 fragCoord)
|
void mainImage(out vec4 fragColor, in vec2 fragCoord)
|
||||||
|
|
@ -84,11 +85,13 @@ void mainImage(out vec4 fragColor, in vec2 fragCoord)
|
||||||
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
|
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
|
||||||
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
|
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
|
||||||
|
|
||||||
|
// Calculate time since last cursor move for fade effect
|
||||||
|
float timeSinceMove = iTime - iTimeCursorChange;
|
||||||
|
|
||||||
// When drawing between cursors for the trail we need to determine the direction
|
// When drawing between cursors for the trail we need to determine the direction
|
||||||
float vertexFactor = determineStartVertexFactor(currentCursor.xy, previousCursor.xy);
|
float vertexFactor = determineStartVertexFactor(currentCursor.xy, previousCursor.xy);
|
||||||
float invertedVertexFactor = 1.0 - vertexFactor;
|
float invertedVertexFactor = 1.0 - vertexFactor;
|
||||||
|
|
||||||
// Calculate centers first for both cursors
|
|
||||||
vec2 centerCC = getRectangleCenter(currentCursor);
|
vec2 centerCC = getRectangleCenter(currentCursor);
|
||||||
vec2 centerCP = getRectangleCenter(previousCursor);
|
vec2 centerCP = getRectangleCenter(previousCursor);
|
||||||
|
|
||||||
|
|
@ -125,23 +128,30 @@ void mainImage(out vec4 fragColor, in vec2 fragCoord)
|
||||||
float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
|
float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
|
||||||
float sdfTrail = getSdfTriangle(vu, v0, v1, v2);
|
float sdfTrail = getSdfTriangle(vu, v0, v1, v2);
|
||||||
|
|
||||||
float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0);
|
// Separate progress calculations for trail animation and fade
|
||||||
|
float progress = clamp(timeSinceMove / DURATION, 0.0, 1.0);
|
||||||
float easedProgress = ease(progress);
|
float easedProgress = ease(progress);
|
||||||
|
|
||||||
|
float fadeProgress = clamp(timeSinceMove / FADE_DURATION, 0.0, 1.0);
|
||||||
|
float easedFadeProgress = ease(fadeProgress);
|
||||||
|
|
||||||
|
// Calculate fade-in opacity (starts at OPACITY, fades to 0)
|
||||||
|
float fadeOpacity = (1.0 - easedFadeProgress) * OPACITY;
|
||||||
|
|
||||||
vec4 newColor = vec4(fragColor);
|
vec4 newColor = vec4(fragColor);
|
||||||
|
|
||||||
vec4 trail = TRAIL_COLOR;
|
vec4 trail = TRAIL_COLOR;
|
||||||
trail = saturate(trail, 2.5);
|
trail = saturate(trail, 2.5);
|
||||||
trail.a *= OPACITY; // Apply transparency to the trail
|
trail.a *= fadeOpacity; // Apply fading transparency to the trail
|
||||||
|
|
||||||
// Draw trail with transparency
|
// Draw trail with fading transparency
|
||||||
float trailMask = antialising(sdfTrail);
|
float trailMask = antialising(sdfTrail);
|
||||||
newColor = mix(newColor, trail, trailMask * OPACITY);
|
newColor = mix(newColor, trail, trailMask * fadeOpacity);
|
||||||
|
|
||||||
// Draw current cursor
|
// Draw current cursor
|
||||||
newColor = mix(newColor, trail, antialising(sdfCurrentCursor));
|
newColor = mix(newColor, trail, antialising(sdfCurrentCursor));
|
||||||
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
|
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
|
||||||
|
|
||||||
// Apply the trail effect with transparency
|
// Apply the trail effect with fading transparency
|
||||||
fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * cappedlinelength) * OPACITY);
|
fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * cappedlinelength) * fadeOpacity);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue