Revision: 12770 http://sourceforge.net/p/skim-app/code/12770 Author: hofman Date: 2022-02-09 10:33:03 +0000 (Wed, 09 Feb 2022) Log Message: ----------- Reuse some kernelsfor multiple transitions with different parameters
Modified Paths: -------------- trunk/SkimTransitions/BoxInTransition/SKTBoxInTransition.m trunk/SkimTransitions/BoxOutTransition/SKTBoxOutTransition.m trunk/SkimTransitions/CoverTransition/SKTCoverTransition.m trunk/SkimTransitions/RevealTransition/SKTRevealTransition.m trunk/SkimTransitions/SKTTransitions.cikernel trunk/SkimTransitions/SplitInTransition/SKTSplitInTransition.m trunk/SkimTransitions/SplitOutTransition/SKTSplitOutTransition.m trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m Modified: trunk/SkimTransitions/BoxInTransition/SKTBoxInTransition.m =================================================================== --- trunk/SkimTransitions/BoxInTransition/SKTBoxInTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/BoxInTransition/SKTBoxInTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -20,7 +20,7 @@ - (id)init { if (_SKTBoxInTransitionKernel == nil) - _SKTBoxInTransitionKernel = [SKTPlugInLoader kernelWithName:@"boxInTransition"]; + _SKTBoxInTransitionKernel = [SKTPlugInLoader kernelWithName:@"boxComposition"]; return [super init]; } @@ -65,8 +65,12 @@ CGFloat y = [inputExtent Y]; CGFloat width = [inputExtent Z]; CGFloat height = [inputExtent W]; + CGFloat cx = [inputCenter X]; + CGFloat cy = [inputCenter Y]; + CGFloat t = [inputTime doubleValue]; + CIVector *rect = [CIVector vectorWithX:t * cx + (1.0 - t) * x Y:t * cy + (1.0 - t) * y Z:(1.0 - t) * width W:(1.0 - t) * height]; NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithDouble:x], [NSNumber numberWithDouble:y], [NSNumber numberWithDouble:width], [NSNumber numberWithDouble:height], nil]; - NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, inputCenter, inputTime, nil]; + NSArray *arguments = [NSArray arrayWithObjects:src, trgt, rect, nil]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:extent, kCIApplyOptionDefinition, extent, kCIApplyOptionExtent, nil]; return [self apply:_SKTBoxInTransitionKernel arguments:arguments options:options]; Modified: trunk/SkimTransitions/BoxOutTransition/SKTBoxOutTransition.m =================================================================== --- trunk/SkimTransitions/BoxOutTransition/SKTBoxOutTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/BoxOutTransition/SKTBoxOutTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -20,7 +20,7 @@ - (id)init { if (_SKTBoxOutTransitionKernel == nil) - _SKTBoxOutTransitionKernel = [SKTPlugInLoader kernelWithName:@"boxOutTransition"]; + _SKTBoxOutTransitionKernel = [SKTPlugInLoader kernelWithName:@"boxComposition"]; return [super init]; } @@ -65,8 +65,12 @@ CGFloat y = [inputExtent Y]; CGFloat width = [inputExtent Z]; CGFloat height = [inputExtent W]; + CGFloat cx = [inputCenter X]; + CGFloat cy = [inputCenter Y]; + CGFloat t = [inputTime doubleValue]; + CIVector *rect = [CIVector vectorWithX:(1.0 - t) * cx + t * x Y:(1.0 - t) * cy + t * y Z:t * width W:t * height]; NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithDouble:x], [NSNumber numberWithDouble:y], [NSNumber numberWithDouble:width], [NSNumber numberWithDouble:height], nil]; - NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, inputCenter, inputTime, nil]; + NSArray *arguments = [NSArray arrayWithObjects:trgt, src, rect, nil]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:extent, kCIApplyOptionDefinition, extent, kCIApplyOptionExtent, nil]; return [self apply:_SKTBoxOutTransitionKernel arguments:arguments options:options]; Modified: trunk/SkimTransitions/CoverTransition/SKTCoverTransition.m =================================================================== --- trunk/SkimTransitions/CoverTransition/SKTCoverTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/CoverTransition/SKTCoverTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -22,7 +22,7 @@ - (id)init { if (_SKTCoverTransitionKernel == nil) - _SKTCoverTransitionKernel = [SKTPlugInLoader kernelWithName:@"coverTransition"]; + _SKTCoverTransitionKernel = [SKTPlugInLoader kernelWithName:@"coverComposition"]; return [super init]; } @@ -80,9 +80,10 @@ CGFloat c = cos(angle); CGFloat s = sin(angle); CGFloat d = [inputExtent Z] * (1.0 - t) / fmax(fabs(c), fabs(s)); + NSNumber *shade = [NSNumber numberWithDouble:1.0 - 0.2 * t]; CIVector *offset = [CIVector vectorWithX:d * c Y:d * s]; NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithDouble:[inputExtent X]], [NSNumber numberWithDouble:[inputExtent Y]], [NSNumber numberWithDouble:[inputExtent Z]], [NSNumber numberWithDouble:[inputExtent W]], nil]; - NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, offset, inputTime, nil]; + NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, offset, shade, nil]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:extent, kCIApplyOptionDefinition, extent, kCIApplyOptionExtent, offset, kCIApplyOptionUserInfo, nil]; [_SKTCoverTransitionKernel setROISelector:@selector(regionOf:destRect:userInfo:)]; Modified: trunk/SkimTransitions/RevealTransition/SKTRevealTransition.m =================================================================== --- trunk/SkimTransitions/RevealTransition/SKTRevealTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/RevealTransition/SKTRevealTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -22,7 +22,7 @@ - (id)init { if (_SKTRevealTransitionKernel == nil) - _SKTRevealTransitionKernel = [SKTPlugInLoader kernelWithName:@"revealTransition"]; + _SKTRevealTransitionKernel = [SKTPlugInLoader kernelWithName:@"coverComposition"]; return [super init]; } @@ -64,8 +64,8 @@ } - (CGRect)regionOf:(int)sampler destRect:(CGRect)R userInfo:(CIVector *)offset { - if (sampler == 0) { - R = CGRectOffset(R, [offset X], [offset Y]); + if (sampler == 1) { + R = CGRectOffset(R, -[offset X], -[offset Y]); } return R; } @@ -75,14 +75,15 @@ { CISampler *src = [CISampler samplerWithImage:inputImage]; CISampler *trgt = [CISampler samplerWithImage:inputTargetImage]; - CGFloat t = [inputTime doubleValue]; + CGFloat t = [inputTime doubleValue]; CGFloat angle = [inputAngle doubleValue]; CGFloat c = cos(angle); CGFloat s = sin(angle); - CGFloat d = [inputExtent Z] * t / fmax(fabs(c), fabs(s)); + CGFloat d = -[inputExtent Z] * t / fmax(fabs(c), fabs(s)); + NSNumber *shade = [NSNumber numberWithDouble:0.8 + 0.2 * t]; CIVector *offset = [CIVector vectorWithX:d * c Y:d * s]; NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithFloat:[inputExtent X]], [NSNumber numberWithFloat:[inputExtent Y]], [NSNumber numberWithFloat:[inputExtent Z]], [NSNumber numberWithFloat:[inputExtent W]], nil]; - NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, offset, inputTime, nil]; + NSArray *arguments = [NSArray arrayWithObjects:trgt, src, inputExtent, offset, shade, nil]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:extent, kCIApplyOptionDefinition, extent, kCIApplyOptionExtent, offset, kCIApplyOptionUserInfo, nil]; [_SKTRevealTransitionKernel setROISelector:@selector(regionOf:destRect:userInfo:)]; Modified: trunk/SkimTransitions/SKTTransitions.cikernel =================================================================== --- trunk/SkimTransitions/SKTTransitions.cikernel 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/SKTTransitions.cikernel 2022-02-09 10:33:03 UTC (rev 12770) @@ -9,7 +9,7 @@ return d1 < width * t ? sample(trgt, samplerCoord(trgt)) : sample(src, samplerCoord(src)); } -kernel vec4 boxInTransition(sampler src, sampler trgt, vec4 extent, vec2 center, float t) +kernel vec4 boxComposition(sampler src, sampler trgt, vec4 rect) { vec2 t1, r1, r2; float d1; @@ -16,8 +16,8 @@ t1 = destCoord(); - r1 = t * center + (1.0 - t) * extent.xy; - r2 = t * center + (1.0 - t) * (extent.xy + extent.zw); + r1 = rect.xy; + r2 = rect.xy + rect.zw; d1 = step(r1.x, t1.x) * step(t1.x, r2.x) * step(r1.y, t1.y) * step(t1.y, r2.y); @@ -24,31 +24,16 @@ return d1 < 0.5 ? sample(trgt, samplerCoord(trgt)) : sample(src, samplerCoord(src)); } -kernel vec4 boxOutTransition(sampler src, sampler trgt, vec4 extent, vec2 center, float t) +kernel vec4 coverComposition(sampler back, sampler front, vec4 extent, vec2 offset, float shade) { - vec2 t1, r1, r2; - float d1; - - t1 = destCoord(); - - r1 = (1.0 - t) * center + t * extent.xy; - r2 = (1.0 - t) * center + t * (extent.xy + extent.zw); - - d1 = step(r1.x, t1.x) * step(t1.x, r2.x) * step(r1.y, t1.y) * step(t1.y, r2.y); - - return d1 > 0.5 ? sample(trgt, samplerCoord(trgt)) : sample(src, samplerCoord(src)); -} - -kernel vec4 coverTransition(sampler src, sampler trgt, vec4 extent, vec2 offset, float t) -{ vec2 t1; vec4 p1, p2; t1 = destCoord() - offset; - p1 = sample(src, samplerTransform(src, destCoord())); - p2 = sample(trgt, samplerTransform(trgt, t1)); + p1 = sample(back, samplerTransform(back, destCoord())); + p2 = sample(front, samplerTransform(front, t1)); p2 = t1.x < extent.x ? vec4(0.0) : (t1.x > extent.x + extent.z ? vec4(0.0) : (t1.y < extent.y ? vec4(0.0) : (t1.y > extent.y + extent.w ? vec4(0.0) : p2))); - p1 = mix(vec4(vec3(0.0), p1.a), p1, 1.0 - 0.2 * t); + p1.rgb = shade * p1.rgb; return p2 + (1.0 - p2.a) * p1; } @@ -108,20 +93,6 @@ return mix(p1, p2, x); } -kernel vec4 revealTransition(sampler src, sampler trgt, vec4 extent, vec2 offset, float t) -{ - vec2 t1; - vec4 p1, p2; - - t1 = destCoord() + offset; - p1 = sample(src, samplerTransform(src, t1)); - p2 = sample(trgt, samplerTransform(trgt, destCoord())); - p1 = t1.x < extent.x ? vec4(0.0) : (t1.x > extent.x + extent.z ? vec4(0.0) : (t1.y < extent.y ? vec4(0.0) : (t1.y > extent.y + extent.w ? vec4(0.0) : p1))); - p2 = mix(vec4(vec3(0.0), p2.a), p2, 0.8 + 0.2 * t); - - return p1 + (1.0 - p1.a) * p2; -} - kernel vec4 sinkTransition(sampler src, sampler trgt, vec2 center, float t) { float pi2 = 6.28318530717958648; @@ -171,36 +142,8 @@ return p1 + (1.0 - p1.a) * p2; } -kernel vec4 splitInTransition(sampler src, sampler trgt, vec4 extent, vec2 center, float t) +kernel vec4 stripsTransition(sampler src, sampler trgt, vec4 extent, float width, float t) { - float x, l, r, d1; - - x = destCoord().x; - - l = t * center.x + (1.0 - t) * extent.x; - r = t * center.x + (1.0 - t) * (extent.x + extent.z); - - d1 = step(l, x) * step(x, r); - - return d1 < 0.5 ? sample(trgt, samplerCoord(trgt)) : sample(src, samplerCoord(src)); -} - -kernel vec4 splitOutTransition(sampler src, sampler trgt, vec4 extent, vec2 center, float t) -{ - float x, l, r, d1; - - x = destCoord().x; - - l = (1.0 - t) * center.x + t * extent.x; - r = (1.0 - t) * center.x + t * (extent.x + extent.z); - - d1 = step(l, x) * step(x, r); - - return d1 > 0.5 ? sample(trgt, samplerCoord(trgt)) : sample(src, samplerCoord(src)); -} - -kernel vec4 splitTransition(sampler src, sampler trgt, vec4 extent, float width, float t) -{ vec2 t1; float d1; vec4 p1, p2; Modified: trunk/SkimTransitions/SplitInTransition/SKTSplitInTransition.m =================================================================== --- trunk/SkimTransitions/SplitInTransition/SKTSplitInTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/SplitInTransition/SKTSplitInTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -20,7 +20,7 @@ - (id)init { if (_SKTSplitInTransitionKernel == nil) - _SKTSplitInTransitionKernel = [SKTPlugInLoader kernelWithName:@"splitInTransition"]; + _SKTSplitInTransitionKernel = [SKTPlugInLoader kernelWithName:@"boxComposition"]; return [super init]; } @@ -65,8 +65,11 @@ CGFloat y = [inputExtent Y]; CGFloat width = [inputExtent Z]; CGFloat height = [inputExtent W]; - NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithDouble:x], [NSNumber numberWithDouble:y], [NSNumber numberWithDouble:width], [NSNumber numberWithDouble:height], nil]; - NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, inputCenter, inputTime, nil]; + CGFloat cx = [inputCenter X]; + CGFloat t = [inputTime doubleValue]; + CIVector *rect = [CIVector vectorWithX:t * cx + (1.0 - t) * x Y:y Z:(1.0 - t) * width W:height]; + NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithDouble:x], [NSNumber numberWithDouble:y], [NSNumber numberWithDouble:width], [NSNumber numberWithDouble:height], nil]; + NSArray *arguments = [NSArray arrayWithObjects:src, trgt, rect, nil]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:extent, kCIApplyOptionDefinition, extent, kCIApplyOptionExtent, nil]; return [self apply:_SKTSplitInTransitionKernel arguments:arguments options:options]; Modified: trunk/SkimTransitions/SplitOutTransition/SKTSplitOutTransition.m =================================================================== --- trunk/SkimTransitions/SplitOutTransition/SKTSplitOutTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/SplitOutTransition/SKTSplitOutTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -20,7 +20,7 @@ - (id)init { if (_SKTSplitOutTransitionKernel == nil) - _SKTSplitOutTransitionKernel = [SKTPlugInLoader kernelWithName:@"splitOutTransition"]; + _SKTSplitOutTransitionKernel = [SKTPlugInLoader kernelWithName:@"boxComposition"]; return [super init]; } @@ -65,8 +65,11 @@ CGFloat y = [inputExtent Y]; CGFloat width = [inputExtent Z]; CGFloat height = [inputExtent W]; + CGFloat cx = [inputCenter X]; + CGFloat t = [inputTime doubleValue]; + CIVector *rect = [CIVector vectorWithX:(1.0 - t) * cx + t * x Y:y Z:t * width W:height]; NSArray *extent = [NSArray arrayWithObjects:[NSNumber numberWithDouble:x], [NSNumber numberWithDouble:y], [NSNumber numberWithDouble:width], [NSNumber numberWithDouble:height], nil]; - NSArray *arguments = [NSArray arrayWithObjects:src, trgt, inputExtent, inputCenter, inputTime, nil]; + NSArray *arguments = [NSArray arrayWithObjects:trgt, src, rect, nil]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:extent, kCIApplyOptionDefinition, extent, kCIApplyOptionExtent, nil]; return [self apply:_SKTSplitOutTransitionKernel arguments:arguments options:options]; Modified: trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m =================================================================== --- trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m 2022-02-08 23:18:58 UTC (rev 12769) +++ trunk/SkimTransitions/StripsTransition/SKTStripsTransition.m 2022-02-09 10:33:03 UTC (rev 12770) @@ -20,7 +20,7 @@ - (id)init { if (_SKTStripsTransitionKernel == nil) - _SKTStripsTransitionKernel = [SKTPlugInLoader kernelWithName:@"splitTransition"]; + _SKTStripsTransitionKernel = [SKTPlugInLoader kernelWithName:@"stripsTransition"]; return [super init]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Skim-app-commit mailing list Skim-app-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/skim-app-commit