X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_Internals.pde;h=425ea0e3c8a34532ef54f39f10bca368be15ba28;hb=270a8b44cd8296bb40fa74e4fcf2e7f7c4f1192c;hp=da9a7c5fffb766771fd9e127103436eee2f23499;hpb=f82959711a831753a6c42137de4e71fc5d4af5fb;p=SugarCubes.git diff --git a/_Internals.pde b/_Internals.pde index da9a7c5..425ea0e 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -14,17 +14,13 @@ */ import glucose.*; -import glucose.control.*; -import glucose.effect.*; import glucose.model.*; -import glucose.pattern.*; -import glucose.transform.*; -import glucose.transition.*; import heronarts.lx.*; -import heronarts.lx.control.*; import heronarts.lx.effect.*; import heronarts.lx.modulator.*; +import heronarts.lx.parameter.*; import heronarts.lx.pattern.*; +import heronarts.lx.transform.*; import heronarts.lx.transition.*; import ddf.minim.*; import ddf.minim.analysis.*; @@ -40,9 +36,6 @@ final float TRAILER_WIDTH = 240; final float TRAILER_DEPTH = 97; final float TRAILER_HEIGHT = 33; -final int MaxCubeHeight = 5; -final int NumBackTowers = 11; - int targetFramerate = 60; int startMillis, lastMillis; @@ -62,6 +55,7 @@ boolean debugMode = false; DebugUI debugUI; boolean uiOn = true; boolean simulationOn = true; +boolean diagnosticsOn = false; LXPattern restoreToPattern = null; PImage logo; float[] hsb = new float[3]; @@ -139,7 +133,7 @@ void setup() { lx = glucose.lx; lx.enableKeyboardTempo(); logTime("Built GLucose engine"); - + // Set the patterns LXEngine engine = lx.engine; engine.setPatterns(patterns = _leftPatterns(glucose)); @@ -216,6 +210,8 @@ void setup() { * Core render loop and drawing functionality. */ void draw() { + long drawStart = System.nanoTime(); + // Draws the simulation and the 2D UI overlay background(40); @@ -233,13 +229,18 @@ void draw() { debugUI.maskColors(sendColors); } + long simulationStart = System.nanoTime(); if (simulationOn) { drawSimulation(simulationColors); } + long simulationNanos = System.nanoTime() - simulationStart; // 2D Overlay UI + long uiStart = System.nanoTime(); drawUI(); - + long uiNanos = System.nanoTime() - uiStart; + + long gammaStart = System.nanoTime(); // Gamma correction here. Apply a cubic to the brightness // for better representation of dynamic range for (int i = 0; i < sendColors.length; ++i) { @@ -247,15 +248,80 @@ void draw() { float b = hsb[2]; sendColors[i] = lx.hsb(360.*hsb[0], 100.*hsb[1], 100.*(b*b*b)); } + long gammaNanos = System.nanoTime() - gammaStart; - // TODO(mcslee): move into GLucose engine + long sendStart = System.nanoTime(); for (PandaDriver p : pandaBoards) { p.send(sendColors); } + long sendNanos = System.nanoTime() - sendStart; + + long drawNanos = System.nanoTime() - drawStart; + + if (diagnosticsOn) { + drawDiagnostics(drawNanos, simulationNanos, uiNanos, gammaNanos, sendNanos); + } +} + +void drawDiagnostics(long drawNanos, long simulationNanos, long uiNanos, long gammaNanos, long sendNanos) { + float ws = 4 / 1000000.; + int thirtyfps = 1000000000 / 30; + int sixtyfps = 1000000000 / 60; + int x = width - 138; + int y = height - 14; + int h = 10; + noFill(); + stroke(#999999); + rect(x, y, thirtyfps * ws, h); + noStroke(); + int xp = x; + float hv = 0; + for (long val : new long[] {lx.timer.drawNanos, simulationNanos, uiNanos, gammaNanos, sendNanos }) { + fill(lx.hsb(hv % 360, 100, 80)); + rect(xp, y, val * ws, h-1); + hv += 140; + xp += val * ws; + } + noFill(); + stroke(#333333); + line(x+sixtyfps*ws, y+1, x+sixtyfps*ws, y+h-1); + + y = y - 14; + xp = x; + float tw = thirtyfps * ws; + noFill(); + stroke(#999999); + rect(x, y, tw, h); + h = 5; + noStroke(); + for (long val : new long[] { + lx.engine.timer.deckNanos, + lx.engine.timer.copyNanos, + lx.engine.timer.fxNanos}) { + float amt = val / (float) lx.timer.drawNanos; + fill(lx.hsb(hv % 360, 100, 80)); + rect(xp, y, amt * tw, h-1); + hv += 140; + xp += amt * tw; + } + + xp = x; + y += h; + hv = 120; + for (long val : new long[] { + lx.engine.getDeck(0).timer.runNanos, + lx.engine.getDeck(1).timer.runNanos, + lx.engine.getDeck(1).getFaderTransition().timer.blendNanos}) { + float amt = val / (float) lx.timer.drawNanos; + fill(lx.hsb(hv % 360, 100, 80)); + rect(xp, y, amt * tw, h-1); + hv += 140; + xp += amt * tw; + } } void drawSimulation(color[] simulationColors) { - camera( + camera( eyeX, eyeY, eyeZ, midX, midY, midZ, 0, -1, 0 @@ -297,7 +363,7 @@ void drawSimulation(color[] simulationColors) { noFill(); strokeWeight(2); beginShape(POINTS); - for (Point p : glucose.model.points) { + for (LXPoint p : glucose.model.points) { stroke(simulationColors[p.index]); vertex(p.x, p.y, p.z); } @@ -528,6 +594,11 @@ void keyPressed() { p.toggle(); } break; + case 'q': + if (!midiEngine.isQwertyEnabled()) { + diagnosticsOn = !diagnosticsOn; + } + break; case 's': if (!midiEngine.isQwertyEnabled()) { simulationOn = !simulationOn;