From d701ecf34f871a4e5f7bf3e466c87e0152c8c790 Mon Sep 17 00:00:00 2001 From: kiwistrongis Date: Fri, 8 Aug 2014 20:04:05 -0400 Subject: [PATCH 1/3] Working on adding custom renderer support --- core/src/processing/core/PApplet.java | 49 +++++++++++++++++++++------ 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index f26a51a43..411de501d 100644 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -467,11 +467,25 @@ public void onCreate(Bundle savedInstanceState) { int sw = sketchWidth(); int sh = sketchHeight(); - if (sketchRenderer().equals(JAVA2D)) { - surfaceView = new SketchSurfaceView(this, sw, sh); - } else if (sketchRenderer().equals(P2D) || sketchRenderer().equals(P3D)) { - surfaceView = new SketchSurfaceViewGL(this, sw, sh, sketchRenderer().equals(P3D)); - } + String renderer_name = sketchRenderer(); + Class renderer_class = null; + try{ + renderer_class = Class.forName( renderer_name);} + catch( ClassNotFoundException exception){ + //what to throw here? + throw new RuntimeException( + "Error: Could not resolve renderer class name", exception);} + + if( renderer_name.equals( JAVA2D)) + surfaceView = new SketchSurfaceView( this, sw, sh); + else if( PGraphicsOpenGL.class.isAssignableFrom( renderer_class)) + surfaceView = new SketchSurfaceViewGL( this, sw, sh, + (Class) renderer_class); + else throw new RuntimeException( + String.format( + "Error: Unsupported renderer class: %s", + renderer_name)); + // g = ((SketchSurfaceView) surfaceView).getGraphics(); // surfaceView.setLayoutParams(new LayoutParams(sketchWidth(), sketchHeight())); @@ -784,7 +798,9 @@ public class SketchSurfaceViewGL extends GLSurfaceView /*implements SketchSurfac SurfaceHolder surfaceHolder; - public SketchSurfaceViewGL(Context context, int wide, int high, boolean is3D) { + public SketchSurfaceViewGL( + Context context, int wide, int high, + Class renderer_class){ super(context); // Check if the system supports OpenGL ES 2.0. @@ -805,11 +821,24 @@ public SketchSurfaceViewGL(Context context, int wide, int high, boolean is3D) { // null. This is required because PApplet.onResume events (which call // this.onResume() and thus require a valid renderer) are triggered // before surfaceChanged() is ever called. - if (is3D) { - g3 = new PGraphics3D(); - } else { + + if( renderer_class.equals( PGraphics2D.class)) g3 = new PGraphics2D(); - } + else if( renderer_class.equals( PGraphics3D.class)) + g3 = new PGraphics3D(); + else + try{ + //dang java generics + Constructor constructor = + renderer_class.getConstructor(); + g3 = constructor.newInstance();} + catch( Exception exception){ + throw new RuntimeException( + "Error: Failed to initialize custom OpenGL renderer", + exception);} + + + //set it up g3.setParent(PApplet.this); g3.setPrimary(true); // Set semi-arbitrary size; will be set properly when surfaceChanged() called From d5a19b8452504fb577062fcece62bd50e5e6a40d Mon Sep 17 00:00:00 2001 From: kiwistrongis Date: Mon, 11 Aug 2014 16:04:22 -0400 Subject: [PATCH 2/3] added some comments and made an error message better --- core/src/processing/core/PApplet.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index 411de501d..48be99ccf 100644 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -467,6 +467,7 @@ public void onCreate(Bundle savedInstanceState) { int sw = sketchWidth(); int sh = sketchHeight(); + //get renderer name anc class String renderer_name = sketchRenderer(); Class renderer_class = null; try{ @@ -474,13 +475,18 @@ public void onCreate(Bundle savedInstanceState) { catch( ClassNotFoundException exception){ //what to throw here? throw new RuntimeException( - "Error: Could not resolve renderer class name", exception);} + String.format( + "Error: Could not resolve renderer class name: %s", renderer_name), + exception);} + //java2d renderer if( renderer_name.equals( JAVA2D)) surfaceView = new SketchSurfaceView( this, sw, sh); + //P2D, P3D, and any other PGraphicsOpenGL-based renderer else if( PGraphicsOpenGL.class.isAssignableFrom( renderer_class)) surfaceView = new SketchSurfaceViewGL( this, sw, sh, (Class) renderer_class); + //anything else else throw new RuntimeException( String.format( "Error: Unsupported renderer class: %s", @@ -822,10 +828,13 @@ public SketchSurfaceViewGL( // this.onResume() and thus require a valid renderer) are triggered // before surfaceChanged() is ever called. + //P2D if( renderer_class.equals( PGraphics2D.class)) g3 = new PGraphics2D(); + //P3D else if( renderer_class.equals( PGraphics3D.class)) g3 = new PGraphics3D(); + //something that extends P2D or P3D else try{ //dang java generics From a28077a74479ec98b92346790e33eabd662b172d Mon Sep 17 00:00:00 2001 From: kiwistrongis Date: Tue, 12 Aug 2014 10:36:26 -0400 Subject: [PATCH 3/3] adjusted code formatting to fit in better --- core/src/processing/core/PApplet.java | 53 +++++++++++++++------------ 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/core/src/processing/core/PApplet.java b/core/src/processing/core/PApplet.java index 48be99ccf..5daa833da 100644 --- a/core/src/processing/core/PApplet.java +++ b/core/src/processing/core/PApplet.java @@ -470,27 +470,30 @@ public void onCreate(Bundle savedInstanceState) { //get renderer name anc class String renderer_name = sketchRenderer(); Class renderer_class = null; - try{ - renderer_class = Class.forName( renderer_name);} - catch( ClassNotFoundException exception){ + try { + renderer_class = Class.forName(renderer_name); + } catch (ClassNotFoundException exception) { //what to throw here? - throw new RuntimeException( - String.format( - "Error: Could not resolve renderer class name: %s", renderer_name), - exception);} + String message = String.format( + "Error: Could not resolve renderer class name: %s", renderer_name); + throw new RuntimeException(message, exception); + } //java2d renderer - if( renderer_name.equals( JAVA2D)) - surfaceView = new SketchSurfaceView( this, sw, sh); + if (renderer_name.equals(JAVA2D)) { + surfaceView = new SketchSurfaceView(this, sw, sh); + } //P2D, P3D, and any other PGraphicsOpenGL-based renderer - else if( PGraphicsOpenGL.class.isAssignableFrom( renderer_class)) - surfaceView = new SketchSurfaceViewGL( this, sw, sh, + else if (PGraphicsOpenGL.class.isAssignableFrom(renderer_class)){ + surfaceView = new SketchSurfaceViewGL(this, sw, sh, (Class) renderer_class); + } //anything else - else throw new RuntimeException( - String.format( - "Error: Unsupported renderer class: %s", - renderer_name)); + else { + String message = String.format( + "Error: Unsupported renderer class: %s", renderer_name) + throw new RuntimeException(message); + } // g = ((SketchSurfaceView) surfaceView).getGraphics(); @@ -829,22 +832,26 @@ public SketchSurfaceViewGL( // before surfaceChanged() is ever called. //P2D - if( renderer_class.equals( PGraphics2D.class)) + if (renderer_class.equals( PGraphics2D.class)) { g3 = new PGraphics2D(); + } //P3D - else if( renderer_class.equals( PGraphics3D.class)) + else if (renderer_class.equals( PGraphics3D.class)) { g3 = new PGraphics3D(); - //something that extends P2D or P3D - else - try{ + } + //something that extends P2D, P3D, or PGraphicsOpenGL + else { + try { //dang java generics Constructor constructor = renderer_class.getConstructor(); - g3 = constructor.newInstance();} - catch( Exception exception){ + g3 = constructor.newInstance(); + } catch (Exception exception) { throw new RuntimeException( "Error: Failed to initialize custom OpenGL renderer", - exception);} + exception); + } + } //set it up