From 9b96dabb1625011a865eeb05c4016ede3353f1ae Mon Sep 17 00:00:00 2001 From: kruland2607 Date: Thu, 4 Apr 2013 10:44:28 -0500 Subject: [PATCH] Dirty fix for problem switching to 3d rendering the first time. --- .../sf/openrocket/gui/figure3d/RocketFigure3d.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java b/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java index 7082f3391..26ec9474b 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java @@ -645,6 +645,20 @@ public class RocketFigure3d extends JPanel implements GLEventListener { } public void setType(final int t) { + // The first time the user selects any 3d figure types, the canvas' internal _drawable + // has not been realized. Unfortunately, there is a test in canvas.invoke which doesn't + // execute the runnable if the drawable isn't realized. + // In order to trump this, we test if the canvas has not been realized and initialize + // the renderer accordingly. There is certainly a better way to do this. + if (!canvas.isRealized()) { + if (t == TYPE_FIGURE) { + rr = new FigureRenderer(); + } else if (t == TYPE_FINISHED) { + rr = new RealisticRenderer(document); + } else if (t == TYPE_UNFINISHED) { + rr = new UnfinishedRenderer(document); + } + } canvas.invoke(true, new GLRunnable() { @Override public boolean run(GLAutoDrawable drawable) {