|
@@ -37,14 +37,13 @@ import com.jme3.input.MouseInput;
|
|
|
import com.jme3.input.TouchInput;
|
|
|
import com.jme3.input.dummy.DummyKeyInput;
|
|
|
import com.jme3.input.dummy.DummyMouseInput;
|
|
|
+import com.jme3.system.AppSettings;
|
|
|
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.logging.Level;
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
-import com.jogamp.opengl.GL;
|
|
|
import com.jogamp.opengl.GLCapabilities;
|
|
|
-import com.jogamp.opengl.GLContext;
|
|
|
import com.jogamp.opengl.GLDrawableFactory;
|
|
|
import com.jogamp.opengl.GLOffscreenAutoDrawable;
|
|
|
import com.jogamp.opengl.GLProfile;
|
|
@@ -61,14 +60,19 @@ public class JoglOffscreenBuffer extends JoglContext implements Runnable {
|
|
|
private GLCapabilities caps;
|
|
|
|
|
|
protected void initInThread(){
|
|
|
- GL gl = GLContext.getCurrentGL();
|
|
|
- if (!gl.hasFullFBOSupport()){
|
|
|
- logger.severe("Offscreen surfaces are not supported.");
|
|
|
- return;
|
|
|
+ // not necessary as JOGL can create an offscreen buffer even without full FBO support
|
|
|
+// if (!GLContext.getCurrent().hasFullFBOSupport()){
|
|
|
+// logger.severe("Offscreen surfaces are not supported.");
|
|
|
+// return;
|
|
|
+// }
|
|
|
+ final GLProfile profile;
|
|
|
+ if (settings.getRenderer().equals(AppSettings.JOGL_OPENGL_FORWARD_COMPATIBLE)) {
|
|
|
+ profile = GLProfile.getMaxProgrammable(true);
|
|
|
+ } else {
|
|
|
+ profile = GLProfile.getMaxFixedFunc(true);
|
|
|
}
|
|
|
-
|
|
|
+ caps = new GLCapabilities(profile);
|
|
|
int samples = getNumSamplesToUse();
|
|
|
- caps = new GLCapabilities(GLProfile.getMaxFixedFunc(true));
|
|
|
caps.setHardwareAccelerated(true);
|
|
|
caps.setDoubleBuffered(true);
|
|
|
caps.setStencilBits(settings.getStencilBits());
|
|
@@ -77,7 +81,7 @@ public class JoglOffscreenBuffer extends JoglContext implements Runnable {
|
|
|
caps.setSampleBuffers(true);
|
|
|
caps.setNumSamples(samples);
|
|
|
|
|
|
- offscreenDrawable = GLDrawableFactory.getFactory(GLProfile.getMaxFixedFunc(true)).createOffscreenAutoDrawable(null, caps, null, width, height);
|
|
|
+ offscreenDrawable = GLDrawableFactory.getFactory(profile).createOffscreenAutoDrawable(null, caps, null, width, height);
|
|
|
|
|
|
offscreenDrawable.display();
|
|
|
|
|
@@ -88,6 +92,16 @@ public class JoglOffscreenBuffer extends JoglContext implements Runnable {
|
|
|
super.internalCreate();
|
|
|
listener.initialize();
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ protected void initContextFirstTime(){
|
|
|
+ offscreenDrawable.getContext().makeCurrent();
|
|
|
+ try {
|
|
|
+ super.initContextFirstTime();
|
|
|
+ } finally {
|
|
|
+ offscreenDrawable.getContext().release();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
protected boolean checkGLError(){
|
|
|
//FIXME
|