+
+ // Send colors
+ color[] sendColors = glucose.getColors();
+ 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) {
+ lx.RGBtoHSB(sendColors[i], hsb);
+ float b = hsb[2];
+ sendColors[i] = lx.hsb(360.*hsb[0], 100.*hsb[1], 100.*(b*b*b));
+ }
+ long gammaNanos = System.nanoTime() - gammaStart;
+
+ // Always draw FPS meter
+ drawFPS();
+
+ // TODO(mcslee): fix
+ long drawNanos = System.nanoTime() - drawStart;
+
+ long simulationNanos = 0, uiNanos = 0;
+ if (diagnosticsOn) {
+ drawDiagnostics(drawNanos, simulationNanos, uiNanos, gammaNanos);
+ }
+}
+
+class UICubesLayer extends UICameraComponent {
+ void onDraw(UI ui) {
+ color[] simulationColors = glucose.getColors();
+ String displayMode = uiCrossfader.getDisplayMode();
+ if (displayMode == "A") {
+ simulationColors = lx.engine.getDeck(GLucose.LEFT_DECK).getColors();
+ } else if (displayMode == "B") {
+ simulationColors = lx.engine.getDeck(GLucose.RIGHT_DECK).getColors();
+ }
+
+ long simulationStart = System.nanoTime();
+ if (simulationOn) {
+ drawSimulation(simulationColors);
+ }
+ long simulationNanos = System.nanoTime() - simulationStart;
+
+ camera();
+ javax.media.opengl.GL gl = ((PGraphicsOpenGL)g).beginGL();
+ gl.glClear(javax.media.opengl.GL.GL_DEPTH_BUFFER_BIT);
+ ((PGraphicsOpenGL)g).endGL();
+ strokeWeight(1);
+ }
+}