diff options
Diffstat (limited to 'chuck')
-rw-r--r-- | chuck/OSCGraphicsLayer.ck | 13 | ||||
-rw-r--r-- | chuck/OSCGraphicsPort.ck | 15 |
2 files changed, 20 insertions, 8 deletions
diff --git a/chuck/OSCGraphicsLayer.ck b/chuck/OSCGraphicsLayer.ck index ffd7fe7..9aed84e 100644 --- a/chuck/OSCGraphicsLayer.ck +++ b/chuck/OSCGraphicsLayer.ck @@ -26,10 +26,13 @@ public class OSCGraphicsLayer { int index; fun void - tick(float in) + tick(float in, float prev) { in $ int => geo[index]; - geo => layer.geo; + + /* optimize: avoid sending unnecessary messages */ + if (geo[index] != (prev $ int)) + geo => layer.geo; } } fun OSCGraphicsPort @ @@ -64,9 +67,11 @@ public class OSCGraphicsLayer { OSCGraphicsLayer @layer; fun void - tick(float in) + tick(float in, float prev) { - in => layer.alpha; + /* optimize: alpha set as float, but there are only 255 alpha levels */ + if ((in*255) $ int != (prev*255) $ int) + in => layer.alpha; } } fun OSCGraphicsPort @ diff --git a/chuck/OSCGraphicsPort.ck b/chuck/OSCGraphicsPort.ck index b633aac..9c81e62 100644 --- a/chuck/OSCGraphicsPort.ck +++ b/chuck/OSCGraphicsPort.ck @@ -2,9 +2,14 @@ public class OSCGraphicsPort extends Chubgraph { inlet => blackhole; inlet => outlet; - 50::ms => dur poll_interval; + second/20 => dur poll_interval; - fun void tick(float in) {} + fun void tick(float in) {} /* virtual */ + fun void + tick(float in, float prev) /* virtual */ + { + in => tick; + } fun void poll() @@ -12,8 +17,10 @@ public class OSCGraphicsPort extends Chubgraph { inlet.last() => float prev; while (poll_interval => now) - if (inlet.last() != prev) - inlet.last() => prev => tick; + if (inlet.last() != prev) { + tick(inlet.last(), prev); + inlet.last() => prev; + } } spork ~ poll(); } |