Skip to content

Commit 8bff2dc

Browse files
committed
Merge pull request #61 from kiwistrongis/working
Permit custom renderers that extend PGraphicsOpenGL
2 parents a11583f + a28077a commit 8bff2dc

File tree

1 file changed

+52
-7
lines changed

1 file changed

+52
-7
lines changed

core/src/processing/core/PApplet.java

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -467,11 +467,34 @@ public void onCreate(Bundle savedInstanceState) {
467467
int sw = sketchWidth();
468468
int sh = sketchHeight();
469469

470-
if (sketchRenderer().equals(JAVA2D)) {
470+
//get renderer name anc class
471+
String renderer_name = sketchRenderer();
472+
Class<?> renderer_class = null;
473+
try {
474+
renderer_class = Class.forName(renderer_name);
475+
} catch (ClassNotFoundException exception) {
476+
//what to throw here?
477+
String message = String.format(
478+
"Error: Could not resolve renderer class name: %s", renderer_name);
479+
throw new RuntimeException(message, exception);
480+
}
481+
482+
//java2d renderer
483+
if (renderer_name.equals(JAVA2D)) {
471484
surfaceView = new SketchSurfaceView(this, sw, sh);
472-
} else if (sketchRenderer().equals(P2D) || sketchRenderer().equals(P3D)) {
473-
surfaceView = new SketchSurfaceViewGL(this, sw, sh, sketchRenderer().equals(P3D));
474485
}
486+
//P2D, P3D, and any other PGraphicsOpenGL-based renderer
487+
else if (PGraphicsOpenGL.class.isAssignableFrom(renderer_class)){
488+
surfaceView = new SketchSurfaceViewGL(this, sw, sh,
489+
(Class<? extends PGraphicsOpenGL>) renderer_class);
490+
}
491+
//anything else
492+
else {
493+
String message = String.format(
494+
"Error: Unsupported renderer class: %s", renderer_name)
495+
throw new RuntimeException(message);
496+
}
497+
475498
// g = ((SketchSurfaceView) surfaceView).getGraphics();
476499

477500
// surfaceView.setLayoutParams(new LayoutParams(sketchWidth(), sketchHeight()));
@@ -784,7 +807,9 @@ public class SketchSurfaceViewGL extends GLSurfaceView /*implements SketchSurfac
784807
SurfaceHolder surfaceHolder;
785808

786809

787-
public SketchSurfaceViewGL(Context context, int wide, int high, boolean is3D) {
810+
public SketchSurfaceViewGL(
811+
Context context, int wide, int high,
812+
Class<? extends PGraphicsOpenGL> renderer_class){
788813
super(context);
789814

790815
// Check if the system supports OpenGL ES 2.0.
@@ -805,11 +830,31 @@ public SketchSurfaceViewGL(Context context, int wide, int high, boolean is3D) {
805830
// null. This is required because PApplet.onResume events (which call
806831
// this.onResume() and thus require a valid renderer) are triggered
807832
// before surfaceChanged() is ever called.
808-
if (is3D) {
809-
g3 = new PGraphics3D();
810-
} else {
833+
834+
//P2D
835+
if (renderer_class.equals( PGraphics2D.class)) {
811836
g3 = new PGraphics2D();
812837
}
838+
//P3D
839+
else if (renderer_class.equals( PGraphics3D.class)) {
840+
g3 = new PGraphics3D();
841+
}
842+
//something that extends P2D, P3D, or PGraphicsOpenGL
843+
else {
844+
try {
845+
//dang java generics
846+
Constructor<? extends PGraphicsOpenGL> constructor =
847+
renderer_class.getConstructor();
848+
g3 = constructor.newInstance();
849+
} catch (Exception exception) {
850+
throw new RuntimeException(
851+
"Error: Failed to initialize custom OpenGL renderer",
852+
exception);
853+
}
854+
}
855+
856+
857+
//set it up
813858
g3.setParent(PApplet.this);
814859
g3.setPrimary(true);
815860
// Set semi-arbitrary size; will be set properly when surfaceChanged() called

0 commit comments

Comments
 (0)