size(VIEWPORT_WIDTH, VIEWPORT_HEIGHT, OPENGL);
frameRate(targetFramerate);
noSmooth();
- // hint(ENABLE_OPENGL_4X_SMOOTH); // no discernable improvement?
logTime("Created viewport");
// Create the model
println("Total setup: " + (millis() - startMillis) + "ms");
println("Hit the 'o' key to toggle live output");
+
+ lx.engine.framesPerSecond.setValue(120);
+ lx.engine.setThreaded(true);
}
public SCPattern getPattern() {
noStroke();
int xp = x;
float hv = 0;
- for (long val : new long[] {lx.timer.drawNanos, simulationNanos, uiNanos, gammaNanos, lx.timer.outputNanos }) {
+ for (long val : new long[] {lx.timer.drawNanos, simulationNanos, uiNanos, gammaNanos, lx.engine.timer.outputNanos }) {
fill(lx.hsb(hv % 360, 100, 80));
rect(xp, y, val * ws, h-1);
hv += 140;
* set your SCPattern class to respond to the controllers that you
* care about.
*/
-
+import processing.event.*;
interface MidiEngineListener {
public void onFocusedDeck(int deckIndex);
}
} else {
mapKeys();
}
- registerKeyEvent(this);
+ registerMethod("keyEvent",this);
}
private void mapAPC() {
if (!enabled) {
return;
}
- char c = Character.toLowerCase(e.getKeyChar());
+ char c = 0;//0Character.toLowerCase(e.getKeyChar());
NoteMeta nm = keyToNote.get(c);
if (nm != null) {
- switch (e.getID()) {
- case KeyEvent.KEY_PRESSED:
+ switch (e.getKeyCode()) {
+ case KeyEvent.PRESS:
noteOnReceived(new Note(Note.NOTE_ON, nm.channel, nm.number + octaveShift*12, 127));
break;
- case KeyEvent.KEY_RELEASED:
+ case KeyEvent.RELEASE:
noteOffReceived(new Note(Note.NOTE_OFF, nm.channel, nm.number + octaveShift*12, 0));
break;
}
}
- if ((mode == KEYS) && (e.getID() == KeyEvent.KEY_PRESSED)) {
+ if ((mode == KEYS) && (e.getKeyCode() == KeyEvent.PRESS)) {
switch (c) {
case 'z':
octaveShift = constrain(octaveShift-1, -4, 4);
return true;
case 83: // scene 2
- effects.flash.trigger();
+ //effects.flash.trigger();
return true;
case 84: // scene 3
* Custom UI components using the framework.
*/
+import java.nio.*;
+import java.util.Arrays;
class UICubesLayer extends UICameraComponent {
+
+int nvert = 200000;
+int SIZEOF_INT = Integer.SIZE / 8;
+int SIZEOF_FLOAT = Float.SIZE / 8;
+
+PGL pgl;
+PShader sh;
+
+int vertLoc;
+int colorLoc;
+
+IntBuffer vboName;
+FloatBuffer vertData;
+
+ boolean initted = false;
+ PShape sha1;
+ int numPoints = 10000;
+
+ void initme()
+ {
+ nvert = model.points.size();
+ sh = loadShader("frag.glsl", "vert.glsl");
+ /*color[] simulationColors = lx.getColors();
+ sha1= createShape();
+ sha1.beginShape(POINTS);
+ for (LXPoint p : model.points) {
+ stroke(simulationColors[p.index]);
+ //pointColor(simulationColors[p.index]);
+ gl2.glPointColor=100;
+ sha1.vertex(p.x, p.y, p.z);
+ }
+ sha1.endShape();*/
+ float[] temp = new float[nvert * 7];
+ for (LXPoint p : model.points) {
+ // position
+ temp[p.index * 7 + 0] = p.x;
+ temp[p.index * 7 + 1] = p.y;
+ temp[p.index * 7 + 2] = p.z;
+
+ // color
+ temp[p.index * 7 + 3] = 0.0;
+ temp[p.index * 7 + 4] = 0.0;
+ temp[p.index * 7 + 5] = 0.0;
+ temp[p.index * 7 + 6] = 1.0;
+ }
+
+ vertData = allocateDirectFloatBuffer(nvert * 7);
+ vertData.rewind();
+ vertData.put(temp);
+ vertData.position(0);
+ vboName = allocateDirectIntBuffer(1);
+ initVBO();
+ }
void onDraw(UI ui) {
+ if(!initted)
+ {
+ initted=true;
+ initme();
+ }
color[] simulationColors = lx.getColors();
String displayMode = uiCrossfader.getDisplayMode();
if (displayMode == "A") {
long simulationStart = System.nanoTime();
if (simulationOn) {
+ hint(DISABLE_DEPTH_TEST);
drawSimulation(simulationColors);
+ hint(ENABLE_DEPTH_TEST);
}
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();
+ camera();
strokeWeight(1);
}
void drawSimulation(color[] simulationColors) {
translate(0, 30, 0);
-
- noStroke();
+
fill(#141414);
drawBox(0, -TRAILER_HEIGHT, 0, 0, 0, 0, TRAILER_WIDTH, TRAILER_HEIGHT, TRAILER_DEPTH, TRAILER_HEIGHT/2.);
fill(#070707);
for (Cube c : model.cubes) {
drawCube(c);
}
-
+
noFill();
- strokeWeight(2);
- beginShape(POINTS);
+ //strokeWeight(2);
+ int count=0;
+
+ ///magic:
+
+ pgl = beginPGL();
+
+
+ sh.bind();
+
+ vertLoc = pgl.getAttribLocation(sh.glProgram, "vertex");
+ colorLoc = pgl.getAttribLocation(sh.glProgram, "color");
+
+ pgl.bindBuffer(PGL.ARRAY_BUFFER, vboName.get(0));
+ pgl.enableVertexAttribArray(vertLoc);
+ pgl.enableVertexAttribArray(colorLoc);
+
+ pgl.vertexAttribPointer(vertLoc, 3, PGL.FLOAT, false, 7 * SIZEOF_FLOAT, 0);
+ pgl.vertexAttribPointer(colorLoc, 4, PGL.FLOAT, false, 7 * SIZEOF_FLOAT, 3 * SIZEOF_FLOAT);
+ javax.media.opengl.GL2 gl2 = (javax.media.opengl.GL2) ((PJOGL)pgl).gl;
+ gl2.glPointSize(2f);
+ pgl.drawArrays(PGL.POINTS, 0, nvert);
+
+ pgl.disableVertexAttribArray(vertLoc);
+ pgl.disableVertexAttribArray(colorLoc);
+ pgl.bindBuffer(PGL.ARRAY_BUFFER, 0);
+
+ sh.unbind();
+ endPGL();
+ createGeometry(simulationColors);
+ pgl.bindBuffer(PGL.ARRAY_BUFFER, vboName.get(0));
+ pgl.bufferData(PGL.ARRAY_BUFFER, nvert * 7 * SIZEOF_FLOAT, vertData, PGL.STATIC_DRAW);
+ }
+
+ void createGeometry(color[] simulationColors) {
for (LXPoint p : model.points) {
- stroke(simulationColors[p.index]);
- vertex(p.x, p.y, p.z);
- }
- endShape();
+ vertData.put(p.index * 7 + 3, ((simulationColors[p.index] >> 16) & 0xFF)/255.0);
+ vertData.put(p.index * 7 + 4, ((simulationColors[p.index] >> 8) & 0xFF)/255.0);
+ vertData.put(p.index * 7 + 5, (simulationColors[p.index]& 0xFF)/255.0);
+ }
}
+void initVBO() {
+
+ pgl = beginPGL();
+ pgl.genBuffers(1, vboName);
+ pgl.bindBuffer(PGL.ARRAY_BUFFER, vboName.get(0));
+ pgl.bufferData(PGL.ARRAY_BUFFER, nvert * 7 * SIZEOF_FLOAT, vertData, PGL.DYNAMIC_DRAW);
+ pgl.bindBuffer(PGL.ARRAY_BUFFER, 0);
+ endPGL();
+}
+
+IntBuffer allocateDirectIntBuffer(int n) {
+ return ByteBuffer.allocateDirect(n * SIZEOF_INT).order(ByteOrder.nativeOrder()).asIntBuffer();
+}
+
+FloatBuffer allocateDirectFloatBuffer(int n) {
+ return ByteBuffer.allocateDirect(n * SIZEOF_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();
+}
void drawCube(Cube c) {
float in = .15;
noStroke();
fill(#393939);
- drawBox(c.x+in, c.y+in, c.z+in, c.rx, c.ry, c.rz, Cube.EDGE_WIDTH-in*2, Cube.EDGE_HEIGHT-in*2, Cube.EDGE_WIDTH-in*2, Cube.CHANNEL_WIDTH-in);
+ // drawBox(c.x+in, c.y+in, c.z+in, c.rx, c.ry, c.rz, Cube.EDGE_WIDTH-in*2, Cube.EDGE_HEIGHT-in*2, Cube.EDGE_WIDTH-in*2, Cube.CHANNEL_WIDTH-in);
}
void drawBox(float x, float y, float z, float rx, float ry, float rz, float xd, float yd, float zd, float sw) {