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
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
\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
\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
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);\r
\r
redrawExtras = true;\r
+ log.verbose("GL - reshape() complete");\r
}\r
\r
@SuppressWarnings("unused")\r
}\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
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
}\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
// ///////////// 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
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