]> git.gag.com Git - debian/openrocket/blobdiff - core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java
- Remove GL Late-initialization. GL is now set up when RocketFigure3d is constructed...
[debian/openrocket] / core / src / net / sf / openrocket / gui / figure3d / RocketFigure3d.java
index 3402f361c84e34855a45df45a78dff0271886481..8df1e8508b84fc4cb7a9729751d1cf456af26afd 100644 (file)
@@ -6,8 +6,7 @@ import java.awt.Graphics2D;
 import java.awt.Point;\r
 import java.awt.Rectangle;\r
 import java.awt.RenderingHints;\r
-import java.awt.event.HierarchyEvent;\r
-import java.awt.event.HierarchyListener;\r
+import java.awt.SplashScreen;\r
 import java.awt.event.MouseEvent;\r
 import java.awt.geom.AffineTransform;\r
 import java.awt.image.BufferedImage;\r
@@ -86,33 +85,60 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
        public RocketFigure3d(Configuration config) {\r
                this.configuration = config;\r
                this.setLayout(new BorderLayout());\r
-\r
-               addHierarchyListener(new HierarchyListener() {\r
-                       @Override\r
-                       public void hierarchyChanged(HierarchyEvent e) {\r
-                               initGLCanvas();\r
-                               RocketFigure3d.this.removeHierarchyListener(this);\r
-                       }\r
-               });\r
+               \r
+               //Only initizlize GL if 3d is enabled.\r
+               if ( is3dEnabled() ){\r
+                       //Fixes a linux / X bug: Splash must be closed before GL Init\r
+                       SplashScreen splash = SplashScreen.getSplashScreen();\r
+                       if ( splash != null )\r
+                               splash.close();\r
+                       \r
+                       initGLCanvas();\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * Return true if 3d view is enabled. This may be toggled by the user at\r
+        * launch time.\r
+        * @return\r
+        */\r
+       public static boolean is3dEnabled(){\r
+               return System.getProperty("openrocket.3d.disable") == null;\r
        }\r
        \r
        private void initGLCanvas(){\r
                log.debug("Initializing RocketFigure3D OpenGL Canvas");\r
                try {\r
                        log.debug("Setting up GL capabilities...");\r
+                       \r
+                       log.verbose("GL - Getting Default Profile");\r
                        GLProfile glp = GLProfile.getDefault();\r
+                       \r
+                       log.verbose("GL - creating GLCapabilities");\r
                        GLCapabilities caps = new GLCapabilities(glp);\r
+                       \r
+                       log.verbose("GL - setSampleBuffers");\r
                        caps.setSampleBuffers(true);\r
+                       \r
+                       log.verbose("GL - setNumSamples");\r
                        caps.setNumSamples(6);\r
+                       \r
+                       log.verbose("GL - setStencilBits");\r
                        caps.setStencilBits(1);\r
 \r
-                       log.debug("Creating OpenGL Canvas");\r
+                       log.verbose("GL - Creating Canvas");\r
                        canvas = new GLCanvas(caps);\r
 \r
+                       log.verbose("GL - Registering as GLEventListener on canvas");\r
                        canvas.addGLEventListener(this);\r
+                       \r
+                       log.verbose("GL - Adding canvas to this JPanel");\r
                        this.add(canvas, BorderLayout.CENTER);\r
 \r
+                       log.verbose("GL - Setting up mouse listeners");\r
                        setupMouseListeners();\r
+                       \r
+                       log.verbose("GL - Rasterizine Carets"); //reticulating splines?\r
                        rasterizeCarets();\r
                        \r
                } catch (Throwable t) {\r
@@ -346,10 +372,12 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
 \r
        @Override\r
        public void dispose(GLAutoDrawable drawable) {\r
+               log.verbose("GL - dispose() called");\r
        }\r
 \r
        @Override\r
        public void init(GLAutoDrawable drawable) {\r
+               log.verbose("GL - init() called");\r
                rr.init(drawable);\r
 \r
                GL2 gl = drawable.getGL().getGL2();\r
@@ -374,10 +402,13 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
 \r
                extrasOverlay = new Overlay(drawable);\r
                caretOverlay = new Overlay(drawable);\r
+               \r
+               log.verbose("GL - init() complete");\r
        }\r
 \r
        @Override\r
        public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {\r
+               log.verbose("GL - reshape() called");\r
                GL2 gl = drawable.getGL().getGL2();\r
                GLU glu = new GLU();\r
 \r
@@ -390,6 +421,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
                gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);\r
                \r
                redrawExtras = true;\r
+               log.verbose("GL - reshape() complete");\r
        }\r
 \r
        @SuppressWarnings("unused")\r
@@ -428,6 +460,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
        }\r
 \r
        private void setupView(GL2 gl, GLU glu) {\r
+               log.verbose("GL - setupView() called");\r
                gl.glLoadIdentity();\r
 \r
                gl.glLightfv(GLLightingFunc.GL_LIGHT1, GLLightingFunc.GL_POSITION,\r
@@ -463,6 +496,8 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
                gl.glScaled(-1,1,1);\r
                gl.glTranslated(-1,0,0);\r
                gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);\r
+               \r
+               log.verbose("GL - setupView() complete");\r
        }\r
 \r
        /**\r
@@ -475,15 +510,19 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
        }\r
 \r
        private void internalRepaint(){\r
+               log.verbose("GL - internalRepaint() called");\r
                super.repaint();\r
                if (canvas != null)\r
                        canvas.display();\r
+               log.verbose("GL - internalRepaint() complete");\r
        }\r
        \r
        @Override\r
        public void repaint() {\r
+               log.verbose("GL - repaint() called");\r
                redrawExtras = true;\r
                internalRepaint();\r
+               log.verbose("GL - repaint() complete");\r
        }\r
 \r
        private Set<RocketComponent> selection = new HashSet<RocketComponent>();\r
@@ -514,6 +553,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
        // ///////////// Extra methods\r
 \r
        private Coordinate project(Coordinate c, GL2 gl, GLU glu) {\r
+               log.verbose("GL - project() called");\r
                double[] mvmatrix = new double[16];\r
                double[] projmatrix = new double[16];\r
                int[] viewport = new int[4];\r
@@ -525,8 +565,10 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
                double out[] = new double[4];\r
                glu.gluProject(c.x, c.y, c.z, mvmatrix, 0, projmatrix, 0, viewport, 0,\r
                                out, 0);\r
-\r
+               \r
+               log.verbose("GL - peoject() complete");\r
                return new Coordinate(out[0], out[1], out[2]);\r
+               \r
        }\r
 \r
        private Coordinate cp = new Coordinate(0, 0, 0);\r