Added missed gl versions (#680)

* Added missed GL versions and Caps.

* Added supporting 3.3, 4.0, 4.1, 4.2, 4.3, 4.4 and 4.5 GL core profiles.
fix-456
Alexandr Brui 8 years ago committed by empirephoenix
parent b56c9c79fc
commit 8abf23b2f2
  1. 52
      jme3-core/src/main/java/com/jme3/renderer/Caps.java
  2. 59
      jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java
  3. 70
      jme3-core/src/main/java/com/jme3/system/AppSettings.java
  4. 26
      jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglContext.java
  5. 82
      jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglWindow.java

@ -128,6 +128,26 @@ public enum Caps {
* Supports OpenGL 4.0 * Supports OpenGL 4.0
*/ */
OpenGL40, OpenGL40,
/**
* Supports OpenGL 4.1
*/
OpenGL41,
/**
* Supports OpenGL 4.2
*/
OpenGL42,
/**
* Supports OpenGL 4.3
*/
OpenGL43,
/**
* Supports OpenGL 4.4
*/
OpenGL44,
/**
* Supports OpenGL 4.5
*/
OpenGL45,
/** /**
* Do not use. * Do not use.
* *
@ -174,6 +194,26 @@ public enum Caps {
* Supports GLSL 4.0 * Supports GLSL 4.0
*/ */
GLSL400, GLSL400,
/**
* Supports GLSL 4.1
*/
GLSL410,
/**
* Supports GLSL 4.2
*/
GLSL420,
/**
* Supports GLSL 4.3
*/
GLSL430,
/**
* Supports GLSL 4.4
*/
GLSL440,
/**
* Supports GLSL 4.5
*/
GLSL450,
/** /**
* Supports reading from textures inside the vertex shader. * Supports reading from textures inside the vertex shader.
*/ */
@ -486,6 +526,18 @@ public enum Caps {
if (!caps.contains(Caps.GLSL150)) return false; if (!caps.contains(Caps.GLSL150)) return false;
case 330: case 330:
if (!caps.contains(Caps.GLSL330)) return false; if (!caps.contains(Caps.GLSL330)) return false;
case 400:
if (!caps.contains(Caps.GLSL400)) return false;
case 410:
if (!caps.contains(Caps.GLSL410)) return false;
case 420:
if (!caps.contains(Caps.GLSL420)) return false;
case 430:
if (!caps.contains(Caps.GLSL430)) return false;
case 440:
if (!caps.contains(Caps.GLSL440)) return false;
case 450:
if (!caps.contains(Caps.GLSL450)) return false;
default: default:
return false; return false;
} }

@ -180,23 +180,38 @@ public final class GLRenderer implements Renderer {
caps.add(Caps.OpenGL20); caps.add(Caps.OpenGL20);
if (oglVer >= 210) { if (oglVer >= 210) {
caps.add(Caps.OpenGL21); caps.add(Caps.OpenGL21);
if (oglVer >= 300) { }
caps.add(Caps.OpenGL30); if (oglVer >= 300) {
if (oglVer >= 310) { caps.add(Caps.OpenGL30);
caps.add(Caps.OpenGL31); }
if (oglVer >= 320) { if (oglVer >= 310) {
caps.add(Caps.OpenGL32); caps.add(Caps.OpenGL31);
} }
if (oglVer >= 330) { if (oglVer >= 320) {
caps.add(Caps.OpenGL33); caps.add(Caps.OpenGL32);
caps.add(Caps.GeometryShader); }
} if (oglVer >= 330) {
if (oglVer >= 400) { caps.add(Caps.OpenGL33);
caps.add(Caps.OpenGL40); caps.add(Caps.GeometryShader);
caps.add(Caps.TesselationShader); }
} if (oglVer >= 400) {
} caps.add(Caps.OpenGL40);
} caps.add(Caps.TesselationShader);
}
if (oglVer >= 410) {
caps.add(Caps.OpenGL41);
}
if (oglVer >= 420) {
caps.add(Caps.OpenGL42);
}
if (oglVer >= 430) {
caps.add(Caps.OpenGL43);
}
if (oglVer >= 440) {
caps.add(Caps.OpenGL44);
}
if (oglVer >= 450) {
caps.add(Caps.OpenGL45);
} }
} }
@ -209,6 +224,16 @@ public final class GLRenderer implements Renderer {
} }
// so that future OpenGL revisions wont break jme3 // so that future OpenGL revisions wont break jme3
// fall through intentional // fall through intentional
case 450:
caps.add(Caps.GLSL450);
case 440:
caps.add(Caps.GLSL440);
case 430:
caps.add(Caps.GLSL430);
case 420:
caps.add(Caps.GLSL420);
case 410:
caps.add(Caps.GLSL410);
case 400: case 400:
caps.add(Caps.GLSL400); caps.add(Caps.GLSL400);
case 330: case 330:

@ -84,6 +84,76 @@ public final class AppSettings extends HashMap<String, Object> {
*/ */
public static final String LWJGL_OPENGL3 = "LWJGL-OpenGL3"; public static final String LWJGL_OPENGL3 = "LWJGL-OpenGL3";
/**
* Use LWJGL as the display system and force using the OpenGL3.3 renderer.
* <p>
* If the underlying system does not support OpenGL3.3, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL33 = "LWJGL-OpenGL33";
/**
* Use LWJGL as the display system and force using the OpenGL4.0 renderer.
* <p>
* If the underlying system does not support OpenGL4.0, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL4 = "LWJGL-OpenGL4";
/**
* Use LWJGL as the display system and force using the OpenGL4.1 renderer.
* <p>
* If the underlying system does not support OpenGL4.1, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL41 = "LWJGL-OpenGL41";
/**
* Use LWJGL as the display system and force using the OpenGL4.2 renderer.
* <p>
* If the underlying system does not support OpenGL4.2, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL42 = "LWJGL-OpenGL42";
/**
* Use LWJGL as the display system and force using the OpenGL4.3 renderer.
* <p>
* If the underlying system does not support OpenGL4.3, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL43 = "LWJGL-OpenGL43";
/**
* Use LWJGL as the display system and force using the OpenGL4.4 renderer.
* <p>
* If the underlying system does not support OpenGL4.4, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL44 = "LWJGL-OpenGL44";
/**
* Use LWJGL as the display system and force using the OpenGL4.5 renderer.
* <p>
* If the underlying system does not support OpenGL4.5, then the context
* initialization will throw an exception.
*
* @see AppSettings#setRenderer(java.lang.String)
*/
public static final String LWJGL_OPENGL45 = "LWJGL-OpenGL45";
/** /**
* Use the LWJGL OpenAL based renderer for audio capabilities. * Use the LWJGL OpenAL based renderer for audio capabilities.
* *

@ -159,14 +159,24 @@ public abstract class LwjglContext implements JmeContext {
} }
protected void initContextFirstTime() { protected void initContextFirstTime() {
final GLCapabilities capabilities = createCapabilities(settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3));
final String renderer = settings.getRenderer();
final GLCapabilities capabilities = createCapabilities(!renderer.equals(AppSettings.LWJGL_OPENGL2));
if (!capabilities.OpenGL20) { if (!capabilities.OpenGL20) {
throw new RendererException("OpenGL 2.0 or higher is required for jMonkeyEngine"); throw new RendererException("OpenGL 2.0 or higher is required for jMonkeyEngine");
} }
if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL2) if (renderer.equals(AppSettings.LWJGL_OPENGL2)
|| settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) { || renderer.equals(AppSettings.LWJGL_OPENGL3)
|| renderer.equals(AppSettings.LWJGL_OPENGL33)
|| renderer.equals(AppSettings.LWJGL_OPENGL4)
|| renderer.equals(AppSettings.LWJGL_OPENGL41)
|| renderer.equals(AppSettings.LWJGL_OPENGL42)
|| renderer.equals(AppSettings.LWJGL_OPENGL43)
|| renderer.equals(AppSettings.LWJGL_OPENGL44)
|| renderer.equals(AppSettings.LWJGL_OPENGL45)) {
GL gl = new LwjglGL(); GL gl = new LwjglGL();
GLExt glext = new LwjglGLExt(); GLExt glext = new LwjglGLExt();
GLFbo glfbo; GLFbo glfbo;
@ -196,18 +206,18 @@ public abstract class LwjglContext implements JmeContext {
glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class); glfbo = (GLFbo) GLTracer.createDesktopGlTracer(glfbo, GLFbo.class);
} }
renderer = new GLRenderer(gl, glext, glfbo); this.renderer = new GLRenderer(gl, glext, glfbo);
renderer.initialize(); this.renderer.initialize();
} else { } else {
throw new UnsupportedOperationException("Unsupported renderer: " + settings.getRenderer()); throw new UnsupportedOperationException("Unsupported renderer: " + renderer);
} }
if (capabilities.GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) { if (capabilities.GL_ARB_debug_output && settings.getBoolean("GraphicsDebug")) {
ARBDebugOutput.glDebugMessageCallbackARB(new LwjglGLDebugOutputHandler(), 0); ARBDebugOutput.glDebugMessageCallbackARB(new LwjglGLDebugOutputHandler(), 0);
} }
renderer.setMainFrameBufferSrgb(settings.isGammaCorrection()); this.renderer.setMainFrameBufferSrgb(settings.isGammaCorrection());
renderer.setLinearizeSrgbImages(settings.isGammaCorrection()); this.renderer.setLinearizeSrgbImages(settings.isGammaCorrection());
// Init input // Init input
if (keyInput != null) { if (keyInput != null) {

@ -32,48 +32,9 @@
package com.jme3.system.lwjgl; package com.jme3.system.lwjgl;
import static org.lwjgl.glfw.GLFW.GLFW_ALPHA_BITS; import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.glfw.GLFW.GLFW_BLUE_BITS;
import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR;
import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MINOR;
import static org.lwjgl.glfw.GLFW.GLFW_DEPTH_BITS;
import static org.lwjgl.glfw.GLFW.GLFW_FALSE;
import static org.lwjgl.glfw.GLFW.GLFW_GREEN_BITS;
import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_CORE_PROFILE;
import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_DEBUG_CONTEXT;
import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_FORWARD_COMPAT;
import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_PROFILE;
import static org.lwjgl.glfw.GLFW.GLFW_RED_BITS;
import static org.lwjgl.glfw.GLFW.GLFW_REFRESH_RATE;
import static org.lwjgl.glfw.GLFW.GLFW_RESIZABLE;
import static org.lwjgl.glfw.GLFW.GLFW_SAMPLES;
import static org.lwjgl.glfw.GLFW.GLFW_SRGB_CAPABLE;
import static org.lwjgl.glfw.GLFW.GLFW_STENCIL_BITS;
import static org.lwjgl.glfw.GLFW.GLFW_STEREO;
import static org.lwjgl.glfw.GLFW.GLFW_TRUE;
import static org.lwjgl.glfw.GLFW.GLFW_VISIBLE;
import static org.lwjgl.glfw.GLFW.glfwCreateWindow;
import static org.lwjgl.glfw.GLFW.glfwDefaultWindowHints;
import static org.lwjgl.glfw.GLFW.glfwDestroyWindow;
import static org.lwjgl.glfw.GLFW.glfwGetPrimaryMonitor;
import static org.lwjgl.glfw.GLFW.glfwGetVideoMode;
import static org.lwjgl.glfw.GLFW.glfwInit;
import static org.lwjgl.glfw.GLFW.glfwMakeContextCurrent;
import static org.lwjgl.glfw.GLFW.glfwPollEvents;
import static org.lwjgl.glfw.GLFW.glfwSetErrorCallback;
import static org.lwjgl.glfw.GLFW.glfwSetWindowFocusCallback;
import static org.lwjgl.glfw.GLFW.glfwSetWindowIcon;
import static org.lwjgl.glfw.GLFW.glfwSetWindowPos;
import static org.lwjgl.glfw.GLFW.glfwSetWindowSizeCallback;
import static org.lwjgl.glfw.GLFW.glfwSetWindowTitle;
import static org.lwjgl.glfw.GLFW.glfwShowWindow;
import static org.lwjgl.glfw.GLFW.glfwSwapBuffers;
import static org.lwjgl.glfw.GLFW.glfwSwapInterval;
import static org.lwjgl.glfw.GLFW.glfwWindowHint;
import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose;
import static org.lwjgl.opengl.GL11.GL_FALSE; import static org.lwjgl.opengl.GL11.GL_FALSE;
import static org.lwjgl.system.MemoryUtil.NULL; import static org.lwjgl.system.MemoryUtil.NULL;
import com.jme3.input.JoyInput; import com.jme3.input.JoyInput;
import com.jme3.input.KeyInput; import com.jme3.input.KeyInput;
import com.jme3.input.MouseInput; import com.jme3.input.MouseInput;
@ -86,15 +47,10 @@ import com.jme3.system.JmeContext;
import com.jme3.system.JmeSystem; import com.jme3.system.JmeSystem;
import com.jme3.system.NanoTimer; import com.jme3.system.NanoTimer;
import com.jme3.util.BufferUtils; import com.jme3.util.BufferUtils;
import org.lwjgl.Version; import org.lwjgl.Version;
import org.lwjgl.glfw.GLFWErrorCallback; import org.lwjgl.glfw.*;
import org.lwjgl.glfw.GLFWImage;
import org.lwjgl.glfw.GLFWVidMode;
import org.lwjgl.glfw.GLFWWindowFocusCallback;
import org.lwjgl.glfw.GLFWWindowSizeCallback;
import java.awt.Graphics2D; import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@ -196,12 +152,38 @@ public abstract class LwjglWindow extends LwjglContext implements Runnable {
glfwDefaultWindowHints(); glfwDefaultWindowHints();
if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) { final String renderer = settings.getRenderer();
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if (renderer.equals(AppSettings.LWJGL_OPENGL3)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL33)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL4)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL41)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL42)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL43)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL44)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4);
} else if (renderer.equals(AppSettings.LWJGL_OPENGL45)) {
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
} else { } else {
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_FALSE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_ANY_PROFILE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
} }

Loading…
Cancel
Save