Merge pull request #28 from bkuker/master

Capture JOGL debug information
This commit is contained in:
plaa 2012-12-26 11:55:58 -08:00
commit 02927d0f2d
3 changed files with 56 additions and 15 deletions

View File

@ -26,6 +26,8 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import com.jogamp.opengl.JoglVersion;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.communication.BugReporter;
import net.sf.openrocket.gui.components.SelectableLabel;
@ -273,6 +275,7 @@ public class BugReportDialog extends JDialog {
sb.append("OpenRocket version: " + BuildProperties.getVersion() + "\n");
sb.append("OpenRocket source: " + BuildProperties.getBuildSource() + "\n");
sb.append("OpenRocket location: " + JarUtil.getCurrentJarFile() + "\n");
sb.append("JOGL version: " + JoglVersion.getInstance().getImplementationVersion() + "\n");
sb.append("Current default locale: " + Locale.getDefault() + "\n");
sb.append("System properties:\n");

View File

@ -0,0 +1,48 @@
package net.sf.openrocket.gui.figure3d;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.startup.Application;
/**
* Redirects system err into OpenRocket's log.debug() if openrocket.debug is enabled.
* This lets me capture JOGL debug as log events, which can be included in error reports etc.
* I wish I could get the JOGL debug log on a separate printstream, so I do not have to take
* over all of ERR.
*
* @author bkuker
*
*/
final class JoglDebugAdaptor {
private static final LogHelper log = Application.getLogger();
final static void plumbJoglDebug() {
if (RocketFigure3d.is3dEnabled() && System.getProperty("openrocket.debug") != null) {
System.setProperty("jogl.debug", "all");
System.setErr(new PrintStream(new OutputStream() {
StringBuilder sb = new StringBuilder();
@Override
public synchronized void write(int b) throws IOException {
if (b == '\r' || b == '\n') {
if (sb.toString().trim().length() > 0){
String s = sb.toString();
if ( Character.isWhitespace(s.charAt(0))){
log.verbose(sb.toString());
} else {
log.debug(sb.toString());
}
}
sb = new StringBuilder();
} else {
sb.append((char) b);
}
}
}));
}
}
}

View File

@ -52,6 +52,8 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
private static final LogHelper log = Application.getLogger();
static {
JoglDebugAdaptor.plumbJoglDebug();
//this allows the GL canvas and things like the motor selection
//drop down to z-order themselves.
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
@ -370,12 +372,12 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
@Override
public void dispose(GLAutoDrawable drawable) {
log.verbose("GL - dispose() called");
log.verbose("GL - dispose()");
}
@Override
public void init(GLAutoDrawable drawable) {
log.verbose("GL - init() called");
log.verbose("GL - init()");
rr.init(drawable);
GL2 gl = drawable.getGL().getGL2();
@ -400,13 +402,11 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
extrasOverlay = new Overlay(drawable);
caretOverlay = new Overlay(drawable);
log.verbose("GL - init() complete");
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
log.verbose("GL - reshape() called");
log.verbose("GL - reshape()");
GL2 gl = drawable.getGL().getGL2();
GLU glu = new GLU();
@ -419,7 +419,6 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
redrawExtras = true;
log.verbose("GL - reshape() complete");
}
@SuppressWarnings("unused")
@ -458,7 +457,6 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
}
private void setupView(GL2 gl, GLU glu) {
log.verbose("GL - setupView() called");
gl.glLoadIdentity();
gl.glLightfv(GLLightingFunc.GL_LIGHT1, GLLightingFunc.GL_POSITION,
@ -494,8 +492,6 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
gl.glScaled(-1, 1, 1);
gl.glTranslated(-1, 0, 0);
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
log.verbose("GL - setupView() complete");
}
/**
@ -508,19 +504,15 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
}
private void internalRepaint() {
log.verbose("GL - internalRepaint() called");
super.repaint();
if (canvas != null)
canvas.display();
log.verbose("GL - internalRepaint() complete");
}
@Override
public void repaint() {
log.verbose("GL - repaint() called");
redrawExtras = true;
internalRepaint();
log.verbose("GL - repaint() complete");
}
private Set<RocketComponent> selection = new HashSet<RocketComponent>();
@ -551,7 +543,6 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
// ///////////// Extra methods
private Coordinate project(Coordinate c, GL2 gl, GLU glu) {
log.verbose("GL - project() called");
double[] mvmatrix = new double[16];
double[] projmatrix = new double[16];
int[] viewport = new int[4];
@ -564,7 +555,6 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
glu.gluProject(c.x, c.y, c.z, mvmatrix, 0, projmatrix, 0, viewport, 0,
out, 0);
log.verbose("GL - project() complete");
return new Coordinate(out[0], out[1], out[2]);
}