|
@@ -29,6 +29,7 @@
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
*/
|
|
|
|
+
|
|
package com.jme3.system.lwjgl;
|
|
package com.jme3.system.lwjgl;
|
|
|
|
|
|
import com.jme3.input.jinput.JInputJoyInput;
|
|
import com.jme3.input.jinput.JInputJoyInput;
|
|
@@ -68,7 +69,6 @@ public abstract class LwjglContext implements JmeContext {
|
|
private static final Logger logger = Logger.getLogger(LwjglContext.class.getName());
|
|
private static final Logger logger = Logger.getLogger(LwjglContext.class.getName());
|
|
|
|
|
|
protected static final String THREAD_NAME = "jME3 Main";
|
|
protected static final String THREAD_NAME = "jME3 Main";
|
|
-
|
|
|
|
protected AtomicBoolean created = new AtomicBoolean(false);
|
|
protected AtomicBoolean created = new AtomicBoolean(false);
|
|
protected AtomicBoolean renderable = new AtomicBoolean(false);
|
|
protected AtomicBoolean renderable = new AtomicBoolean(false);
|
|
protected final Object createdLock = new Object();
|
|
protected final Object createdLock = new Object();
|
|
@@ -112,7 +112,6 @@ public abstract class LwjglContext implements JmeContext {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
protected int determineMaxSamples(int requestedSamples) {
|
|
protected int determineMaxSamples(int requestedSamples) {
|
|
try {
|
|
try {
|
|
// If we already have a valid context, determine samples using current
|
|
// If we already have a valid context, determine samples using current
|
|
@@ -130,13 +129,11 @@ public abstract class LwjglContext implements JmeContext {
|
|
} catch (LWJGLException ex) {
|
|
} catch (LWJGLException ex) {
|
|
listener.handleError("Failed to check if display is current", ex);
|
|
listener.handleError("Failed to check if display is current", ex);
|
|
}
|
|
}
|
|
-
|
|
|
|
if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) {
|
|
if ((Pbuffer.getCapabilities() & Pbuffer.PBUFFER_SUPPORTED) == 0) {
|
|
// No pbuffer, assume everything is supported.
|
|
// No pbuffer, assume everything is supported.
|
|
return Integer.MAX_VALUE;
|
|
return Integer.MAX_VALUE;
|
|
} else {
|
|
} else {
|
|
Pbuffer pb = null;
|
|
Pbuffer pb = null;
|
|
-
|
|
|
|
// OpenGL2 method: Create pbuffer and query samples
|
|
// OpenGL2 method: Create pbuffer and query samples
|
|
// from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample.
|
|
// from GL_ARB_framebuffer_object or GL_EXT_framebuffer_multisample.
|
|
try {
|
|
try {
|
|
@@ -161,7 +158,6 @@ public abstract class LwjglContext implements JmeContext {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
protected void loadNatives() {
|
|
protected void loadNatives() {
|
|
if (JmeSystem.isLowPermissions()) {
|
|
if (JmeSystem.isLowPermissions()) {
|
|
return;
|
|
return;
|
|
@@ -179,7 +175,6 @@ public abstract class LwjglContext implements JmeContext {
|
|
System.setProperty("org.lwjgl.librarypath", extractPath);
|
|
System.setProperty("org.lwjgl.librarypath", extractPath);
|
|
NativeLibraryLoader.loadNativeLibrary("lwjgl", true, false);
|
|
NativeLibraryLoader.loadNativeLibrary("lwjgl", true, false);
|
|
}
|
|
}
|
|
-
|
|
|
|
protected int getNumSamplesToUse() {
|
|
protected int getNumSamplesToUse() {
|
|
int samples = 0;
|
|
int samples = 0;
|
|
if (settings.getSamples() > 1) {
|
|
if (settings.getSamples() > 1) {
|
|
@@ -190,7 +185,6 @@ public abstract class LwjglContext implements JmeContext {
|
|
"Couldn''t satisfy antialiasing samples requirement: x{0}. "
|
|
"Couldn''t satisfy antialiasing samples requirement: x{0}. "
|
|
+ "Video hardware only supports: x{1}",
|
|
+ "Video hardware only supports: x{1}",
|
|
new Object[]{samples, supportedSamples});
|
|
new Object[]{samples, supportedSamples});
|
|
-
|
|
|
|
samples = supportedSamples;
|
|
samples = supportedSamples;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -202,48 +196,43 @@ public abstract class LwjglContext implements JmeContext {
|
|
throw new RendererException("OpenGL 2.0 or higher is "
|
|
throw new RendererException("OpenGL 2.0 or higher is "
|
|
+ "required for jMonkeyEngine");
|
|
+ "required for jMonkeyEngine");
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL2)
|
|
if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL2)
|
|
|| settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) {
|
|
|| settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) {
|
|
GL gl = new LwjglGL();
|
|
GL gl = new LwjglGL();
|
|
GLExt glext = new LwjglGLExt();
|
|
GLExt glext = new LwjglGLExt();
|
|
GLFbo glfbo;
|
|
GLFbo glfbo;
|
|
-
|
|
|
|
|
|
+
|
|
if (GLContext.getCapabilities().OpenGL30) {
|
|
if (GLContext.getCapabilities().OpenGL30) {
|
|
glfbo = new LwjglGLFboGL3();
|
|
glfbo = new LwjglGLFboGL3();
|
|
} else {
|
|
} else {
|
|
glfbo = new LwjglGLFboEXT();
|
|
glfbo = new LwjglGLFboEXT();
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
if (settings.getBoolean("GraphicsDebug")) {
|
|
if (settings.getBoolean("GraphicsDebug")) {
|
|
gl = new GLDebugDesktop(gl, glext, glfbo);
|
|
gl = new GLDebugDesktop(gl, glext, glfbo);
|
|
glext = (GLExt) gl;
|
|
glext = (GLExt) gl;
|
|
glfbo = (GLFbo) gl;
|
|
glfbo = (GLFbo) gl;
|
|
}
|
|
}
|
|
-
|
|
|
|
if (settings.getBoolean("GraphicsTiming")) {
|
|
if (settings.getBoolean("GraphicsTiming")) {
|
|
GLTimingState timingState = new GLTimingState();
|
|
GLTimingState timingState = new GLTimingState();
|
|
gl = (GL) GLTiming.createGLTiming(gl, timingState, GL.class, GL2.class, GL3.class, GL4.class);
|
|
gl = (GL) GLTiming.createGLTiming(gl, timingState, GL.class, GL2.class, GL3.class, GL4.class);
|
|
glext = (GLExt) GLTiming.createGLTiming(glext, timingState, GLExt.class);
|
|
glext = (GLExt) GLTiming.createGLTiming(glext, timingState, GLExt.class);
|
|
glfbo = (GLFbo) GLTiming.createGLTiming(glfbo, timingState, GLFbo.class);
|
|
glfbo = (GLFbo) GLTiming.createGLTiming(glfbo, timingState, GLFbo.class);
|
|
}
|
|
}
|
|
-
|
|
|
|
if (settings.getBoolean("GraphicsTrace")) {
|
|
if (settings.getBoolean("GraphicsTrace")) {
|
|
gl = (GL) GLTracer.createDesktopGlTracer(gl, GL.class, GL2.class, GL3.class, GL4.class);
|
|
gl = (GL) GLTracer.createDesktopGlTracer(gl, GL.class, GL2.class, GL3.class, GL4.class);
|
|
glext = (GLExt) GLTracer.createDesktopGlTracer(glext, GLExt.class);
|
|
glext = (GLExt) GLTracer.createDesktopGlTracer(glext, GLExt.class);
|
|
glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class);
|
|
glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class);
|
|
}
|
|
}
|
|
-
|
|
|
|
renderer = new GLRenderer(gl, glext, glfbo);
|
|
renderer = new GLRenderer(gl, glext, glfbo);
|
|
renderer.initialize();
|
|
renderer.initialize();
|
|
} else {
|
|
} else {
|
|
throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer());
|
|
throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer());
|
|
}
|
|
}
|
|
-
|
|
|
|
if (GLContext.getCapabilities().GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) {
|
|
if (GLContext.getCapabilities().GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) {
|
|
ARBDebugOutput.glDebugMessageCallbackARB(new ARBDebugOutputCallback(new LwjglGLDebugOutputHandler()));
|
|
ARBDebugOutput.glDebugMessageCallbackARB(new ARBDebugOutputCallback(new LwjglGLDebugOutputHandler()));
|
|
}
|
|
}
|
|
-
|
|
|
|
renderer.setMainFrameBufferSrgb(settings.isGammaCorrection());
|
|
renderer.setMainFrameBufferSrgb(settings.isGammaCorrection());
|
|
renderer.setLinearizeSrgbImages(settings.isGammaCorrection());
|
|
renderer.setLinearizeSrgbImages(settings.isGammaCorrection());
|
|
|
|
|
|
@@ -270,15 +259,12 @@ public abstract class LwjglContext implements JmeContext {
|
|
createdLock.notifyAll();
|
|
createdLock.notifyAll();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
public void internalCreate() {
|
|
public void internalCreate() {
|
|
timer = new LwjglTimer();
|
|
timer = new LwjglTimer();
|
|
-
|
|
|
|
synchronized (createdLock) {
|
|
synchronized (createdLock) {
|
|
created.set(true);
|
|
created.set(true);
|
|
createdLock.notifyAll();
|
|
createdLock.notifyAll();
|
|
}
|
|
}
|
|
-
|
|
|
|
if (renderable.get()) {
|
|
if (renderable.get()) {
|
|
initContextFirstTime();
|
|
initContextFirstTime();
|
|
} else {
|
|
} else {
|
|
@@ -308,7 +294,6 @@ public abstract class LwjglContext implements JmeContext {
|
|
public boolean isCreated() {
|
|
public boolean isCreated() {
|
|
return created.get();
|
|
return created.get();
|
|
}
|
|
}
|
|
-
|
|
|
|
public boolean isRenderable() {
|
|
public boolean isRenderable() {
|
|
return renderable.get();
|
|
return renderable.get();
|
|
}
|
|
}
|