diff --git a/app/PdeEditor.java b/app/PdeEditor.java index f35a9ed74..c5ce5c5cf 100644 --- a/app/PdeEditor.java +++ b/app/PdeEditor.java @@ -98,6 +98,9 @@ public class PdeEditor extends JFrame JMenuItem saveAsMenuItem; //JMenuItem beautifyMenuItem; + JRadioButtonMenuItem coreRendererItem; + JRadioButtonMenuItem openglRendererItem; + // boolean running; @@ -616,13 +619,49 @@ public class PdeEditor extends JFrame }); menu.add(item); - //menu.add(newJMenuItem("Stop", 'T')); - menu.add(new JMenuItem("Stop")); + item = new JMenuItem("Stop"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { handleStop(); } }); + menu.add(item); + + JMenu rendererMenu = new JMenu("Renderer"); + menu.add(rendererMenu); + + coreRendererItem = new JRadioButtonMenuItem("Processing"); + rendererMenu.add(coreRendererItem); + coreRendererItem.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + //System.out.println("setting renderer"); + //openglRendererItem.setState(false); + //coreRendererItem.setState(true); + PdePreferences.set("renderer", "core"); + } + }); + + openglRendererItem = new JRadioButtonMenuItem("OpenGL"); + rendererMenu.add(openglRendererItem); + openglRendererItem.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + //System.out.println("setting renderer"); + //openglRendererItem.setState(true); + //coreRendererItem.setState(false); + PdePreferences.set("renderer", "opengl"); + } + }); + + ButtonGroup rendererGroup = new ButtonGroup(); + rendererGroup.add(coreRendererItem); + rendererGroup.add(openglRendererItem); + + boolean useOpenGL = PdePreferences.get("renderer").equals("opengl"); + coreRendererItem.setSelected(!useOpenGL); + openglRendererItem.setSelected(useOpenGL); + + // + menu.addSeparator(); // diff --git a/app/PdePreprocessor.java b/app/PdePreprocessor.java index 69bb27cf3..933397d96 100644 --- a/app/PdePreprocessor.java +++ b/app/PdePreprocessor.java @@ -177,10 +177,16 @@ public class PdePreprocessor { } while (true); - int importsCount = imports.size(); - extraImports = new String[importsCount]; + extraImports = new String[imports.size()]; imports.copyInto(extraImports); + // if using opengl, add it to the special imports + if (PdePreferences.get("renderer").equals("opengl")) { + extraImports = new String[imports.size() + 1]; + imports.copyInto(extraImports); + extraImports[extraImports.length - 1] = "processing.opengl.*"; + } + /* if (codeFolderPackages != null) { extraImports = new String[importsCount + codeFolderPackages.length]; @@ -340,9 +346,20 @@ public class PdePreprocessor { } } + boolean opengl = PdePreferences.get("renderer").equals("opengl"); + if (opengl) { + out.println("import processing.opengl.*; "); + } + if (programType < JAVA) { // open the class definition - out.print("public class " + className + " extends PApplet {"); + out.print("public class " + className + " extends "); + if (opengl) { + out.print("PAppletGL"); + } else { + out.print("PApplet"); + } + out.print(" {"); if (programType == STATIC) { // now that size() and background() can go inside of draw() diff --git a/app/PdeSketch.java b/app/PdeSketch.java index be8f6564b..b67ee4b0c 100644 --- a/app/PdeSketch.java +++ b/app/PdeSketch.java @@ -1098,6 +1098,11 @@ public class PdeSketch { externalRuntime = true; } + // if running in opengl mode, this is gonna be external + if (PdePreferences.get("renderer").equals("opengl")) { + externalRuntime = true; + } + // 2. run preproc on that code using the sugg class name // to create a single .java file and write to buildpath diff --git a/build/shared/lib/preferences.txt b/build/shared/lib/preferences.txt index a8c5c8bd8..beff19655 100755 --- a/build/shared/lib/preferences.txt +++ b/build/shared/lib/preferences.txt @@ -184,6 +184,9 @@ run.external = false run.window.width.minimum = 120 run.window.height.minimum = 120 +# set this to opengl to make it the default renderer +renderer = core + # prompt for sketch location when 'new' is hit sketchbook.prompt = false diff --git a/core/PApplet.java b/core/PApplet.java index b4e6d76a6..7b626873b 100644 --- a/core/PApplet.java +++ b/core/PApplet.java @@ -202,7 +202,7 @@ public class PApplet extends Applet //loopMethod = true; looping = true; redraw = true; // draw this guy once - firstMouseEvent = true; + //firstMouseEvent = true; /* // call setup for changed params diff --git a/core/todo.txt b/core/todo.txt index 91d753d0b..5cb044413 100644 --- a/core/todo.txt +++ b/core/todo.txt @@ -38,6 +38,8 @@ X make play button un-highlight with opengl X also make window move messages work properly X very necessary, since opens window at 100x100 X problem was the threading issues +X bring back renderer menu +X reading/saving pref for opengl renderer X beginFrame() around setup() X draw mode stuff happens inside setup.. @@ -45,7 +47,14 @@ o or maybe need to get better at size() inside of draw() ? _ make this consistent with the regular PApplet _ otherwise things are going to be weird/difficult for debugging -_ when running externally, regular applets don't get placed properly +_ make sure background() gets called at least once with opengl +_ depth() shouldn't be needed for opengl unless actually 3D +_ right now the camera doesn't get set up unless you call depth() + +_ when running externally, applets don't always get placed properly +_ problem is in gl and in core, and is inconsistent +_ move more logic for layout into PApplet.. maybe a static method? +_ this way can avoid duplicating / breaking things _ still threading issues with running opengl _ first run hangs until quit diff --git a/todo.txt b/todo.txt index 1b3fee8e8..6fd145096 100644 --- a/todo.txt +++ b/todo.txt @@ -72,6 +72,25 @@ X (basically any time it sees "class" in the code.. X may be subject to errors, but errs on side of just running ext) X runs out of processing data folder +_ macosx is using /Library instead of ~/Library.. get this fixed +_ domain version wasn't in the stubs.. grr +_ or maybe it's an int or something? + +_ preproc: making all functions public that have no specifier +_ this will make draw() etc all much easier +_ as well as the library events +_ focusGained/focusLost was added.. + +_ basic sample audio playback needed for p5 + + +// + + +MESS TO SORT + +_ what's up with int() -> toInt() conversion? + _ use screen manager to run present mode properly _ set both versions to require java 1.4 _ change the Info.plist inside macosx @@ -86,30 +105,6 @@ _ since it may take a long time (i.e. 1000s of screen grabs) _ scanning sketchbook folder may be extremely slow _ not sure why this would be the case -_ preproc: making all functions public that have no specifier -_ this will make draw() etc all much easier -_ as well as the library events -_ focusGained/focusLost was added.. - -_ basic sample audio playback needed for p5 - -_ what's up with int() -> toInt() conversion? - - -// - - -PROBLEMS FOR NEW USERS (workshop) -_ making it easier to draw shapes -_ missing semicolons - better error message -_ "unexpected token void" -> "You're mixing dynamic and static mode" -_ forgetting the quotes around strings -_ separate reference for /dev version -_ angleMode(DEGREES) -> mistyped keywords, caps being wrong - - -MESS TO SORT - _ subfolders in the 'data' directory don't work _ make sure that the preproc stuff gets built once @@ -156,6 +151,21 @@ _ if additional tab is "public" class.. then make external? ...................................................................... +PROBLEMS FOR NEW USERS (workshop) +_ making it easier to draw shapes +_ missing semicolons - better error message +_ "unexpected token void" -> "You're mixing dynamic and static mode" +_ forgetting the quotes around strings +_ separate reference for /dev version +_ angleMode(DEGREES) -> mistyped keywords, caps being wrong + +more +_ keypressed should maybe throw an error + + +...................................................................... + + casey notes _ sketches no longer require a "data" folder _ "draw" is not highlighted as a keyword.. other keywords?