Merge pull request #146 from bkuker/bugfix-osx-java7
GL Preferences for compatibility - specifically with Java 7 on OSX.
This commit is contained in:
commit
0a4ca9fe54
@ -26,7 +26,7 @@
|
||||
<classpathentry kind="lib" path="lib/javax.inject.jar"/>
|
||||
<classpathentry kind="lib" path="lib/aopalliance.jar"/>
|
||||
<classpathentry kind="lib" path="lib/jogl/gluegen-rt.jar" sourcepath="reference/gluegen-v2.0-rc11-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/jogl/jogl-all.jar" sourcepath="reference/jogl-v2.0-rc11-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/jogl/jogl-all.jar" sourcepath="reference/jogl-all-2.0.2-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib-test/test-plugin.jar"/>
|
||||
<classpathentry kind="lib" path="lib/annotation-detector-3.0.2-SNAPSHOT.jar"/>
|
||||
<classpathentry kind="lib" path="lib/logback-classic-1.0.12.jar" sourcepath="reference/logback-classic-1.0.12-sources.jar"/>
|
||||
|
BIN
core/reference/jogl-all-2.0.2-sources.jar
Normal file
BIN
core/reference/jogl-all-2.0.2-sources.jar
Normal file
Binary file not shown.
Binary file not shown.
@ -253,7 +253,15 @@ pref.dlg.tab.Materials = Materials
|
||||
pref.dlg.tab.Custommaterials = Custom materials
|
||||
pref.dlg.tab.Options = Options
|
||||
pref.dlg.tab.Miscellaneousoptions = Miscellaneous options
|
||||
pref.dlg.tab.DecalEditor = Graphics Editor
|
||||
|
||||
pref.dlg.tab.Graphics = Graphics
|
||||
pref.dlg.lbl.DecalEditor = Graphics Editor
|
||||
pref.dlg.opengl.lbl.title = 3D Graphics
|
||||
pref.dlg.opengl.but.enableGL = Enable 3D Graphics
|
||||
pref.dlg.opengl.but.enableAA = Enable Antialiasing
|
||||
pref.dlg.opengl.lbl.useFBO = Use Off-screen Rendering
|
||||
|
||||
|
||||
pref.dlg.lbl.Positiontoinsert = Position to insert new body components:
|
||||
pref.dlg.lbl.Confirmdeletion = Confirm deletion of simulations:
|
||||
pref.dlg.lbl.User-definedthrust = User-defined thrust curves:
|
||||
|
@ -16,6 +16,7 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.swing.AbstractListModel;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.JButton;
|
||||
@ -29,10 +30,10 @@ import javax.swing.JPanel;
|
||||
import javax.swing.JProgressBar;
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.JTabbedPane;
|
||||
import javax.swing.JTextArea;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.Timer;
|
||||
import javax.swing.border.TitledBorder;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
@ -41,6 +42,7 @@ import javax.swing.event.DocumentListener;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import net.sf.openrocket.communication.UpdateInfo;
|
||||
import net.sf.openrocket.communication.UpdateInfoRetriever;
|
||||
import net.sf.openrocket.gui.adaptors.BooleanModel;
|
||||
import net.sf.openrocket.gui.components.DescriptionArea;
|
||||
import net.sf.openrocket.gui.components.StyledLabel;
|
||||
import net.sf.openrocket.gui.components.StyledLabel.Style;
|
||||
@ -62,6 +64,8 @@ import net.sf.openrocket.util.Utils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.itextpdf.text.Font;
|
||||
|
||||
|
||||
public class PreferencesDialog extends JDialog {
|
||||
private static final Logger log = LoggerFactory.getLogger(PreferencesDialog.class);
|
||||
@ -92,7 +96,7 @@ public class PreferencesDialog extends JDialog {
|
||||
tabbedPane.addTab(trans.get("pref.dlg.tab.Options"), null, optionsPane(),
|
||||
trans.get("pref.dlg.tab.Miscellaneousoptions"));
|
||||
//// Decal Editor selection
|
||||
tabbedPane.addTab(trans.get("pref.dlg.tab.DecalEditor"), decalEditorPane());
|
||||
tabbedPane.addTab(trans.get("pref.dlg.tab.Graphics"), graphicsOptionsPane());
|
||||
|
||||
//// Close button
|
||||
JButton close = new JButton(trans.get("dlg.but.close"));
|
||||
@ -471,108 +475,160 @@ public class PreferencesDialog extends JDialog {
|
||||
}
|
||||
|
||||
|
||||
private JPanel decalEditorPane() {
|
||||
private JPanel graphicsOptionsPane() {
|
||||
|
||||
JPanel panel = new JPanel(new MigLayout("fillx, ins 30lp n n n"));
|
||||
JPanel panel = new JPanel(new MigLayout("fillx"));
|
||||
|
||||
ButtonGroup execGroup = new ButtonGroup();
|
||||
|
||||
JRadioButton showPrompt = new JRadioButton(trans.get("EditDecalDialog.lbl.prompt"));
|
||||
showPrompt.setSelected(!preferences.isDecalEditorPreferenceSet());
|
||||
showPrompt.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (((JRadioButton) e.getItem()).isSelected()) {
|
||||
preferences.clearDecalEditorPreference();
|
||||
}
|
||||
}
|
||||
});
|
||||
panel.add(showPrompt, "wrap");
|
||||
execGroup.add(showPrompt);
|
||||
|
||||
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.EDIT)) {
|
||||
|
||||
JRadioButton systemRadio = new JRadioButton(trans.get("EditDecalDialog.lbl.system"));
|
||||
systemRadio.setSelected(preferences.isDecalEditorPreferenceSystem());
|
||||
systemRadio.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (((JRadioButton) e.getItem()).isSelected()) {
|
||||
preferences.setDecalEditorPreference(true, null);
|
||||
panel.add(new JPanel(new MigLayout("fill, ins n n n")) {
|
||||
{ //Editor Options
|
||||
TitledBorder border = BorderFactory.createTitledBorder(trans.get("pref.dlg.lbl.DecalEditor"));
|
||||
GUIUtil.changeFontStyle(border, Font.BOLD);
|
||||
setBorder(border);
|
||||
|
||||
ButtonGroup execGroup = new ButtonGroup();
|
||||
|
||||
JRadioButton showPrompt = new JRadioButton(trans.get("EditDecalDialog.lbl.prompt"));
|
||||
showPrompt.setSelected(!preferences.isDecalEditorPreferenceSet());
|
||||
showPrompt.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (((JRadioButton) e.getItem()).isSelected()) {
|
||||
preferences.clearDecalEditorPreference();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
panel.add(systemRadio, "wrap");
|
||||
execGroup.add(systemRadio);
|
||||
|
||||
}
|
||||
|
||||
boolean commandLineIsSelected = preferences.isDecalEditorPreferenceSet() && !preferences.isDecalEditorPreferenceSystem();
|
||||
final JRadioButton commandRadio = new JRadioButton(trans.get("EditDecalDialog.lbl.cmdline"));
|
||||
commandRadio.setSelected(commandLineIsSelected);
|
||||
panel.add(commandRadio, "wrap");
|
||||
execGroup.add(commandRadio);
|
||||
|
||||
final JTextArea commandText = new JTextArea();
|
||||
commandText.setEnabled(commandLineIsSelected);
|
||||
commandText.setText(commandLineIsSelected ? preferences.getDecalEditorCommandLine() : "");
|
||||
commandText.getDocument().addDocumentListener(new DocumentListener() {
|
||||
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
preferences.setDecalEditorPreference(false, commandText.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
preferences.setDecalEditorPreference(false, commandText.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
preferences.setDecalEditorPreference(false, commandText.getText());
|
||||
}
|
||||
|
||||
});
|
||||
panel.add(commandText, "growx, wrap");
|
||||
|
||||
final JButton chooser = new JButton(trans.get("EditDecalDialog.btn.chooser"));
|
||||
chooser.setEnabled(commandLineIsSelected);
|
||||
chooser.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fc = new JFileChooser();
|
||||
int action = fc.showOpenDialog(SwingUtilities.windowForComponent(PreferencesDialog.this));
|
||||
if (action == JFileChooser.APPROVE_OPTION) {
|
||||
String commandLine = fc.getSelectedFile().getAbsolutePath();
|
||||
commandText.setText(commandLine);
|
||||
preferences.setDecalEditorPreference(false, commandLine);
|
||||
});
|
||||
add(showPrompt, "wrap");
|
||||
execGroup.add(showPrompt);
|
||||
|
||||
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.EDIT)) {
|
||||
|
||||
JRadioButton systemRadio = new JRadioButton(trans.get("EditDecalDialog.lbl.system"));
|
||||
systemRadio.setSelected(preferences.isDecalEditorPreferenceSystem());
|
||||
systemRadio.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (((JRadioButton) e.getItem()).isSelected()) {
|
||||
preferences.setDecalEditorPreference(true, null);
|
||||
}
|
||||
}
|
||||
});
|
||||
add(systemRadio, "wrap");
|
||||
execGroup.add(systemRadio);
|
||||
|
||||
}
|
||||
|
||||
boolean commandLineIsSelected = preferences.isDecalEditorPreferenceSet() && !preferences.isDecalEditorPreferenceSystem();
|
||||
final JRadioButton commandRadio = new JRadioButton(trans.get("EditDecalDialog.lbl.cmdline"));
|
||||
commandRadio.setSelected(commandLineIsSelected);
|
||||
add(commandRadio, "wrap");
|
||||
execGroup.add(commandRadio);
|
||||
|
||||
final JTextField commandText = new JTextField();
|
||||
commandText.setEnabled(commandLineIsSelected);
|
||||
commandText.setText(commandLineIsSelected ? preferences.getDecalEditorCommandLine() : "");
|
||||
commandText.getDocument().addDocumentListener(new DocumentListener() {
|
||||
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
preferences.setDecalEditorPreference(false, commandText.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
preferences.setDecalEditorPreference(false, commandText.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
preferences.setDecalEditorPreference(false, commandText.getText());
|
||||
}
|
||||
|
||||
});
|
||||
add(commandText, "growx, wrap");
|
||||
|
||||
final JButton chooser = new JButton(trans.get("EditDecalDialog.btn.chooser"));
|
||||
chooser.setEnabled(commandLineIsSelected);
|
||||
chooser.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
JFileChooser fc = new JFileChooser();
|
||||
int action = fc.showOpenDialog(SwingUtilities.windowForComponent(PreferencesDialog.this));
|
||||
if (action == JFileChooser.APPROVE_OPTION) {
|
||||
String commandLine = fc.getSelectedFile().getAbsolutePath();
|
||||
commandText.setText(commandLine);
|
||||
preferences.setDecalEditorPreference(false, commandLine);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
add(chooser, "wrap");
|
||||
|
||||
|
||||
commandRadio.addChangeListener(new ChangeListener() {
|
||||
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
boolean enabled = commandRadio.isSelected();
|
||||
commandText.setEnabled(enabled);
|
||||
chooser.setEnabled(enabled);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
panel.add(chooser, "growx, wrap");
|
||||
}, "growx, span");
|
||||
|
||||
|
||||
commandRadio.addChangeListener(new ChangeListener() {
|
||||
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
boolean enabled = commandRadio.isSelected();
|
||||
commandText.setEnabled(enabled);
|
||||
chooser.setEnabled(enabled);
|
||||
panel.add(new JPanel(new MigLayout("fill, ins n n n")) {
|
||||
{/////GL Options
|
||||
TitledBorder border = BorderFactory.createTitledBorder(trans.get("pref.dlg.opengl.lbl.title"));
|
||||
GUIUtil.changeFontStyle(border, Font.BOLD);
|
||||
setBorder(border);
|
||||
|
||||
//// The effects will take place the next time you open a window.
|
||||
add(new StyledLabel(
|
||||
trans.get("pref.dlg.lbl.effect1"), -2, Style.ITALIC),
|
||||
"spanx, wrap");
|
||||
|
||||
BooleanModel enableGLModel = new BooleanModel(preferences.getBoolean(Preferences.OPENGL_ENABLED, true));
|
||||
final JCheckBox enableGL = new JCheckBox(enableGLModel);
|
||||
enableGL.setText(trans.get("pref.dlg.opengl.but.enableGL"));
|
||||
enableGL.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
preferences.putBoolean(Preferences.OPENGL_ENABLED, enableGL.isSelected());
|
||||
}
|
||||
});
|
||||
add(enableGL, "wrap");
|
||||
|
||||
final JCheckBox enableAA = new JCheckBox(trans.get("pref.dlg.opengl.but.enableAA"));
|
||||
enableAA.setSelected(preferences.getBoolean(Preferences.OPENGL_ENABLE_AA, true));
|
||||
enableAA.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
preferences.putBoolean(Preferences.OPENGL_ENABLE_AA, enableAA.isSelected());
|
||||
}
|
||||
});
|
||||
enableGLModel.addEnableComponent(enableAA);
|
||||
add(enableAA, "wrap");
|
||||
|
||||
final JCheckBox useFBO = new JCheckBox(trans.get("pref.dlg.opengl.lbl.useFBO"));
|
||||
useFBO.setSelected(preferences.getBoolean(Preferences.OPENGL_USE_FBO, false));
|
||||
useFBO.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
preferences.putBoolean(Preferences.OPENGL_USE_FBO, useFBO.isSelected());
|
||||
}
|
||||
});
|
||||
enableGLModel.addEnableComponent(useFBO);
|
||||
add(useFBO, "wrap");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}, "growx, span");
|
||||
return panel;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private class DefaultUnitSelector extends AbstractListModel implements ComboBoxModel {
|
||||
|
||||
private final UnitGroup group;
|
||||
|
@ -127,12 +127,13 @@ public class RealisticRenderer extends RocketRenderer {
|
||||
g.render(gl);
|
||||
|
||||
if (decals && t != null && tex != null) {
|
||||
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_LINEAR);
|
||||
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
|
||||
|
||||
tex.enable(gl);
|
||||
tex.bind(gl);
|
||||
|
||||
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR_MIPMAP_LINEAR);
|
||||
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
|
||||
|
||||
gl.glMatrixMode(GL.GL_TEXTURE);
|
||||
gl.glPushMatrix();
|
||||
|
||||
@ -170,6 +171,7 @@ public class RealisticRenderer extends RocketRenderer {
|
||||
gl.glMatrixMode(GL.GL_TEXTURE);
|
||||
gl.glPopMatrix();
|
||||
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
|
||||
|
||||
tex.disable(gl);
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package net.sf.openrocket.gui.figure3d;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
@ -23,6 +24,7 @@ import javax.media.opengl.GLEventListener;
|
||||
import javax.media.opengl.GLProfile;
|
||||
import javax.media.opengl.GLRunnable;
|
||||
import javax.media.opengl.awt.GLCanvas;
|
||||
import javax.media.opengl.awt.GLJPanel;
|
||||
import javax.media.opengl.fixedfunc.GLLightingFunc;
|
||||
import javax.media.opengl.fixedfunc.GLMatrixFunc;
|
||||
import javax.media.opengl.glu.GLU;
|
||||
@ -39,6 +41,8 @@ import net.sf.openrocket.gui.figureelements.FigureElement;
|
||||
import net.sf.openrocket.gui.main.Splash;
|
||||
import net.sf.openrocket.rocketcomponent.Configuration;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.startup.Application;
|
||||
import net.sf.openrocket.startup.Preferences;
|
||||
import net.sf.openrocket.util.Coordinate;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
|
||||
@ -71,8 +75,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
|
||||
private final OpenRocketDocument document;
|
||||
private final Configuration configuration;
|
||||
private GLCanvas canvas;
|
||||
|
||||
private Component canvas;
|
||||
|
||||
|
||||
private Overlay extrasOverlay, caretOverlay;
|
||||
@ -109,7 +112,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
}
|
||||
|
||||
public void flushTextureCaches() {
|
||||
canvas.invoke(true, new GLRunnable() {
|
||||
((GLAutoDrawable) canvas).invoke(true, new GLRunnable() {
|
||||
@Override
|
||||
public boolean run(GLAutoDrawable drawable) {
|
||||
rr.flushTextureCache(drawable);
|
||||
@ -124,7 +127,11 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
* @return
|
||||
*/
|
||||
public static boolean is3dEnabled() {
|
||||
return System.getProperty("openrocket.3d.disable") == null;
|
||||
//Allow disable by command line, if program won't even start
|
||||
if (System.getProperty("openrocket.3d.disable") != null)
|
||||
return false;
|
||||
//return by preference
|
||||
return Application.getPreferences().getBoolean(Preferences.OPENGL_ENABLED, true);
|
||||
}
|
||||
|
||||
private void initGLCanvas() {
|
||||
@ -138,17 +145,26 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
log.trace("GL - creating GLCapabilities");
|
||||
final GLCapabilities caps = new GLCapabilities(glp);
|
||||
|
||||
log.trace("GL - setSampleBuffers");
|
||||
caps.setSampleBuffers(true);
|
||||
if (Application.getPreferences().getBoolean(Preferences.OPENGL_ENABLE_AA, true)) {
|
||||
log.trace("GL - setSampleBuffers");
|
||||
caps.setSampleBuffers(true);
|
||||
|
||||
log.trace("GL - setNumSamples");
|
||||
caps.setNumSamples(6);
|
||||
} else {
|
||||
log.trace("GL - Not enabling AA by user pref");
|
||||
}
|
||||
|
||||
log.trace("GL - setNumSamples");
|
||||
caps.setNumSamples(6);
|
||||
|
||||
log.trace("GL - Creating Canvas");
|
||||
canvas = new GLCanvas(caps);
|
||||
if (Application.getPreferences().getBoolean(Preferences.OPENGL_USE_FBO, false)) {
|
||||
log.trace("GL - Creating GLJPanel");
|
||||
canvas = new GLJPanel(caps);
|
||||
} else {
|
||||
log.trace("GL - Creating GLCanvas");
|
||||
canvas = new GLCanvas(caps);
|
||||
}
|
||||
|
||||
log.trace("GL - Registering as GLEventListener on canvas");
|
||||
canvas.addGLEventListener(this);
|
||||
((GLAutoDrawable) canvas).addGLEventListener(this);
|
||||
|
||||
log.trace("GL - Adding canvas to this JPanel");
|
||||
this.add(canvas, BorderLayout.CENTER);
|
||||
@ -306,6 +322,10 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
|
||||
drawExtras(gl, glu);
|
||||
drawCarets(gl, glu);
|
||||
|
||||
//GLJPanel with GLSL Flipper relies on this:
|
||||
gl.glFrontFace(GL.GL_CCW);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -532,7 +552,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
log.debug("3D Figure Updated");
|
||||
cachedBounds = null;
|
||||
if (canvas != null) {
|
||||
canvas.invoke(true, new GLRunnable() {
|
||||
((GLAutoDrawable) canvas).invoke(true, new GLRunnable() {
|
||||
@Override
|
||||
public boolean run(GLAutoDrawable drawable) {
|
||||
rr.updateFigure(drawable);
|
||||
@ -543,9 +563,10 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
}
|
||||
|
||||
private void internalRepaint() {
|
||||
if (canvas != null) {
|
||||
((GLAutoDrawable) canvas).display();
|
||||
}
|
||||
super.repaint();
|
||||
if (canvas != null)
|
||||
canvas.display();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -677,15 +698,19 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
||||
newRR = new FigureRenderer();
|
||||
}
|
||||
|
||||
if (!canvas.isRealized()) {
|
||||
if (canvas instanceof GLCanvas && !((GLCanvas) canvas).isRealized()) {
|
||||
rr = newRR;
|
||||
} else if (canvas instanceof GLJPanel && !((GLJPanel) canvas).isRealized()) {
|
||||
rr = newRR;
|
||||
} else {
|
||||
canvas.invoke(true, new GLRunnable() {
|
||||
((GLAutoDrawable) canvas).invoke(true, new GLRunnable() {
|
||||
@Override
|
||||
public boolean run(GLAutoDrawable drawable) {
|
||||
rr.dispose(drawable);
|
||||
rr = newRR;
|
||||
newRR.init(drawable);
|
||||
if (canvas instanceof GLJPanel)
|
||||
internalRepaint();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
@ -82,12 +82,17 @@ public abstract class RocketRenderer {
|
||||
}
|
||||
|
||||
ByteBuffer bb = ByteBuffer.allocateDirect(4);
|
||||
|
||||
|
||||
if (p == null)
|
||||
return null; //Allow pick to be called without a point for debugging
|
||||
|
||||
gl.glReadPixels(p.x, p.y, 1, 1, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, bb);
|
||||
|
||||
final int pickColor = bb.getInt();
|
||||
final int pickIndex = ((pickColor >> 20) & 0xF00) | ((pickColor >> 16) & 0x0F0) | ((pickColor >> 12) & 0x00F);
|
||||
|
||||
log.trace("Picked pixel color is {} index is {}", pickColor, pickIndex);
|
||||
|
||||
if (pickIndex < 0 || pickIndex > pickParts.size() - 1)
|
||||
return null;
|
||||
|
||||
|
@ -50,6 +50,11 @@ public abstract class Preferences {
|
||||
public static final String PREFERRED_THRUST_CURVE_MOTOR_NODE = "preferredThrustCurveMotors";
|
||||
private static final String AUTO_OPEN_LAST_DESIGN = "AUTO_OPEN_LAST_DESIGN";
|
||||
|
||||
//Preferences related to 3D graphics
|
||||
public static final String OPENGL_ENABLED = "OpenGL_Is_Enabled";
|
||||
public static final String OPENGL_ENABLE_AA = "OpenGL_Antialiasing_Is_Enabled";
|
||||
public static final String OPENGL_USE_FBO = "OpenGL_Use_FBO";
|
||||
|
||||
/*
|
||||
* ******************************************************************************************
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user