-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Loading Extensions doesn't seem to work on GL3+ (at least in core profile, as the compat profile bypasses this problem).
Note that for this to work you need AppSetttings#set("GraphicsDebug", true). Then:
com.jme3.renderer.RendererException: An OpenGL error occurred - Invalid enum argument (Error Code: 1280)
at com.jme3.renderer.opengl.GLDebug.checkError(GLDebug.java:46)
at com.jme3.renderer.opengl.GLDebugES.glGetString(GLDebugES.java:287)
at com.jme3.renderer.opengl.GLRenderer.loadExtensions(GLRenderer.java:145)
at com.jme3.renderer.opengl.GLRenderer.loadCapabilitiesCommon(GLRenderer.java:294)
at com.jme3.renderer.opengl.GLRenderer.loadCapabilities(GLRenderer.java:583)
at com.jme3.renderer.opengl.GLRenderer.initialize(GLRenderer.java:599)
at com.jme3.system.lwjgl.LwjglContext.initContextFirstTime(LwjglContext.java:284)
at com.jme3.system.lwjgl.LwjglContext.internalCreate(LwjglContext.java:424)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:117)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:211)
at java.lang.Thread.run(Thread.java:748)
jmonkeyengine/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java
Lines 578 to 582 in 3f59008
| if (gl2 != null && !(gl instanceof GLES_30)) { | |
| loadCapabilitiesGL2(); | |
| } else { | |
| loadCapabilitiesES(); | |
| } |
This is the problem:
We need a much better way to differentiate the OpenGL Version, because
jmonkeyengine/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java
Lines 135 to 145 in 3f59008
| if (caps.contains(Caps.OpenGL30)) { | |
| // If OpenGL3+ is available, use the non-deprecated way | |
| // of getting supported extensions. | |
| gl3.glGetInteger(GL3.GL_NUM_EXTENSIONS, intBuf16); | |
| int extensionCount = intBuf16.get(0); | |
| for (int i = 0; i < extensionCount; i++) { | |
| String extension = gl3.glGetString(GL.GL_EXTENSIONS, i); | |
| extensionSet.add(extension); | |
| } | |
| } else { | |
| extensionSet.addAll(Arrays.asList(gl.glGetString(GL.GL_EXTENSIONS).split(" "))); |
I am not 100% sure, that Caps.OpenGL30 is not set because of that, but according to the stack trace it really seems to me, that here, openGL ES is falsely detected and thus OpenGL30 is not present. This means we use the OpenGL 1 way of querying for extensions, which doesn't work in the Core Profile.
I think this issue has a much greater impact on everything, as every code trying to detect OpenGL30 or any version for that matter, would have failed before(?) when in core profile.