OpenGL 3.2 on Mac OS X trouble. jme 3.1 from github

Since the water filter is working now, why do you still need OpenGL3?
As I mentioned before, jME3 uses OpenGL extensions internally instead of OpenGL3, so enabling it doesn’t give you anything.

Okay, now I know that its all right :slight_smile: thanks for your help. It is important to know whats going on for being confident while using any framework.

If there is no bc profile on osx i assume osx currently does not support geometry and tessllation shaders?

Can’t test since i don’t have access to a mac, would be good to know in any case. @normen, could you try the geo + tess tests?

OSX supports OpenGL 4.1 (on Macs that are not too old) so there are support for geometry and tesselation shaders. It’s just that OSX doesn’t support bc profile for OGL 3.x.

OSX supports, its true, though to have an access to opengl 3-4 features you have to do some magic, which doesn’t work in jme at the moment. As I was told above, there is no need to use opengl 3-4. On my mac with jmonkey 3.1 latest build I have opengl 2.1 with glsl 1.20.

I just pushed a bunch of changes which should provides much better support for core profile. Certain features that jME3 uses still require compatibility though, like luminance / alpha textures. You can try it and see if anything improves…

3 Likes

Thank you, its a really nice to get a real help here =)

I’ve tried to run my code (which runs good before I pull your changes) and it crashes now (with default renderer settings). I also tried to set opengl3 renderer and my code also crashed =)) but! it successfully initialized with opengl 4.1 version heh =) My code fails on sky map initializing. Here is my exception for enabled LWJGL_OPENGL3 setting:

INFO: Running on jMonkeyEngine 3.1.0 (snapshot-github)
 * Branch: master
 * Git Hash: e90720d
 * Build Date: 2015-04-26
Apr 26, 2015 9:39:17 PM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: null
 * Driver Version: null
 * Scaling Factor: 1
Apr 26, 2015 9:39:17 PM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: NVIDIA Corporation
 * Renderer: NVIDIA GeForce GT 650M OpenGL Engine
 * OpenGL Version: 4.1 NVIDIA-10.2.7 310.41.25f01
 * GLSL Version: 4.10
 * Profile: Core
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Device: Built-in Output
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Vendor: Apple Computer Inc.
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Renderer: Software
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Version: 1.1
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: ALC extensions: ALC_EXT_CAPTURE ALC_ENUMERATION_EXT ALC_EXT_MAC_OSX ALC_EXT_ASA ALC_EXT_ASA_DISTORTION ALC_EXT_ASA_ROGER_BEEP
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: AL extensions: AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE AL_EXT_float32 AL_EXT_STATIC_BUFFER AL_EXT_SOURCE_NOTIFICATIONS AL_EXT_SOURCE_SPATIALIZATION
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: AudioRenderer supports 64 channels
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: Pausing audio device not supported.
Apr 26, 2015 9:39:17 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: OpenAL EFX not available! Audio effects won't work.
Apr 26, 2015 9:39:18 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel was already registered. The new definition will override the previous.
Apr 26, 2015 9:39:18 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-red was already registered. The new definition will override the previous.
Apr 26, 2015 9:39:18 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-no-shadow was already registered. The new definition will override the previous.
Apr 26, 2015 9:39:18 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-red-no-shadow was already registered. The new definition will override the previous.
Apr 26, 2015 9:39:18 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-simple was already registered. The new definition will override the previous.
Apr 26, 2015 9:39:18 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-bright was already registered. The new definition will override the previous.
Apr 26, 2015 9:39:18 PM com.jme3.texture.plugins.DDSLoader loadHeader
WARNING: Got 11 mipmaps, expected 12
Apr 26, 2015 9:39:18 PM com.jme3.renderer.opengl.GLRenderer updateShaderSourceData
WARNING: Bad compile of:
1	#version 110
2	// -- begin import Common/ShaderLib/Optics.glsllib --
3	#if defined(SPHERE_MAP) || defined(EQUIRECT_MAP)
4	#define ENVMAP sampler2D
5	#define TEXENV texture2D
6	#else
7	#define ENVMAP samplerCube
8	#define TEXENV textureCube
9	#endif
10	
11	// converts a normalized direction vector
12	// into a texture coordinate for fetching
13	// texel from a sphere map
14	vec2 Optics_SphereCoord(in vec3 dir){
15	    float dzplus1 = dir.z + 1.0;
16	
17	    // compute 1/2p
18	    // NOTE: this simplification only works if dir is normalized.
19	    float inv_two_p = 1.414 * sqrt(dzplus1);
20	    //float inv_two_p = sqrt(dir.x * dir.x + dir.y * dir.y + dzplus1 * dzplus1);
21	    inv_two_p *= 2.0;
22	    inv_two_p = 1.0 / inv_two_p;
23	
24	    // compute texcoord
25	    return (dir.xy * vec2(inv_two_p)) + vec2(0.5);
26	}
27	
28	#ifndef PI
29	    #define PI 3.14159265358979323846264
30	#endif
31	//should be vec2(1.0 / (PI * 2.0), 1.0 / PI) but it's precomputed.
32	const vec2 Optics_Glsllib_Rads = vec2(0.159154943091895, 0.318309886183790);
33	vec2 Optics_LonLatCoords(in ENVMAP envMap, in vec3 dir){
34	 float lon = atan(dir.z, dir.x)+ PI;
35	 float lat = acos(dir.y); 
36	 return vec2(lon, lat) * Optics_Glsllib_Rads; 
37	}
38	
39	vec4 Optics_GetEnvColor(in ENVMAP envMap, in vec3 dir){
40	    #ifdef SPHERE_MAP
41	    return texture2D(envMap, Optics_SphereCoord(dir));
42	    #else
43	        #ifdef EQUIRECT_MAP
44	            return texture2D(envMap, Optics_LonLatCoords(envMap,dir));            
45	        #else
46	            return textureCube(envMap, dir);
47	        #endif
48	    #endif
49	}
50	// -- end import Common/ShaderLib/Optics.glsllib --
51	
52	uniform ENVMAP m_Texture;
53	
54	varying vec3 direction;
55	
56	void main() {
57	    vec3 dir = normalize(direction);
58	    gl_FragColor = Optics_GetEnvColor(m_Texture, dir);
59	}

Apr 26, 2015 9:39:18 PM com.jme3.app.Application handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
com.jme3.renderer.RendererException: compile error in: ShaderSource[name=Common/MatDefs/Misc/Sky.frag, defines, type=Fragment, language=GLSL100]
ERROR: 0:1: '' :  version '110' is not supported
ERROR: 0:2: '' :  #version required and missing.
ERROR: 0:54: 'varying' : syntax error: syntax error

	at com.jme3.renderer.opengl.GLRenderer.updateShaderSourceData(GLRenderer.java:1131)
	at com.jme3.renderer.opengl.GLRenderer.updateShaderData(GLRenderer.java:1158)
	at com.jme3.renderer.opengl.GLRenderer.setShader(GLRenderer.java:1222)
	at com.jme3.material.Material.render(Material.java:1214)
	at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:568)
	at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:266)
	at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:308)
	at com.jme3.water.ReflectionProcessor.postQueue(ReflectionProcessor.java:89)
	at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1025)
	at com.jme3.water.WaterFilter.preFrame(WaterFilter.java:170)
	at com.jme3.post.FilterPostProcessor.preFrame(FilterPostProcessor.java:342)
	at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1001)
	at com.jme3.renderer.RenderManager.render(RenderManager.java:1078)
	at com.jme3.app.SimpleApplication.update(SimpleApplication.java:260)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:152)
	at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:192)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:233)
	at java.lang.Thread.run(Thread.java:745)

And here is an exception for default setRenderer() setting:

INFO: Running on jMonkeyEngine 3.1.0 (snapshot-github)
 * Branch: master
 * Git Hash: e90720d
 * Build Date: 2015-04-26
Apr 26, 2015 9:48:27 PM com.jme3.system.lwjgl.LwjglContext printContextInitInfo
INFO: LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: null
 * Driver Version: null
 * Scaling Factor: 1
Apr 26, 2015 9:48:27 PM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
WARNING: Your graphics card does not support non-power-of-2 textures. Some features might not work.
Apr 26, 2015 9:48:27 PM com.jme3.renderer.opengl.GLRenderer loadCapabilitiesCommon
INFO: OpenGL Renderer Information
 * Vendor: NVIDIA Corporation
 * Renderer: NVIDIA GeForce GT 650M OpenGL Engine
 * OpenGL Version: 2.1 NVIDIA-10.2.7 310.41.25f01
 * GLSL Version: 1.20
 * Profile: Compatibility
Apr 26, 2015 9:48:27 PM com.jme3.renderer.opengl.GLRenderer setMainFrameBufferSrgb
WARNING: sRGB framebuffer is not supported by video hardware, but was requested.
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Device: Built-in Output
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Vendor: Apple Computer Inc.
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Renderer: Software
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: Audio Version: 1.1
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: ALC extensions: ALC_EXT_CAPTURE ALC_ENUMERATION_EXT ALC_EXT_MAC_OSX ALC_EXT_ASA ALC_EXT_ASA_DISTORTION ALC_EXT_ASA_ROGER_BEEP
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: AL extensions: AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE AL_EXT_float32 AL_EXT_STATIC_BUFFER AL_EXT_SOURCE_NOTIFICATIONS AL_EXT_SOURCE_SPATIALIZATION
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
INFO: AudioRenderer supports 64 channels
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: Pausing audio device not supported.
Apr 26, 2015 9:48:27 PM com.jme3.audio.openal.ALAudioRenderer initOpenAL
WARNING: OpenAL EFX not available! Audio effects won't work.
Apr 26, 2015 9:48:28 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel was already registered. The new definition will override the previous.
Apr 26, 2015 9:48:28 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-red was already registered. The new definition will override the previous.
Apr 26, 2015 9:48:28 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-no-shadow was already registered. The new definition will override the previous.
Apr 26, 2015 9:48:28 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-red-no-shadow was already registered. The new definition will override the previous.
Apr 26, 2015 9:48:28 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-simple was already registered. The new definition will override the previous.
Apr 26, 2015 9:48:28 PM de.lessvoid.nifty.Nifty registerStyle
WARNING: Style: nifty-panel-bright was already registered. The new definition will override the previous.
Apr 26, 2015 9:48:28 PM com.jme3.texture.plugins.DDSLoader loadHeader
WARNING: Got 11 mipmaps, expected 12
Apr 26, 2015 9:48:28 PM com.jme3.app.Application handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
com.jme3.renderer.RendererException: non-power-of-2 textures are not supported by the video hardware
	at com.jme3.renderer.opengl.GLRenderer.checkNonPowerOfTwo(GLRenderer.java:1931)
	at com.jme3.renderer.opengl.GLRenderer.setTexture(GLRenderer.java:2100)
	at com.jme3.material.MatParamTexture.apply(MatParamTexture.java:106)
	at com.jme3.material.Material.render(Material.java:1177)
	at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:568)
	at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:266)
	at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:308)
	at com.jme3.water.ReflectionProcessor.postQueue(ReflectionProcessor.java:89)
	at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1025)
	at com.jme3.water.WaterFilter.preFrame(WaterFilter.java:170)
	at com.jme3.post.FilterPostProcessor.preFrame(FilterPostProcessor.java:342)
	at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1001)
	at com.jme3.renderer.RenderManager.render(RenderManager.java:1078)
	at com.jme3.app.SimpleApplication.update(SimpleApplication.java:260)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:152)
	at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:192)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:233)
	at java.lang.Thread.run(Thread.java:745)

The same for me and little more just on sdk start

Running on jMonkeyEngine 3.1.0 (snapshot-github)
 * Branch: master
 * Git Hash: e90720d
 * Build Date: 2015-04-26
LWJGL 2.9.3 context running on thread jME3 Main
 * Graphics Adapter: null
 * Driver Version: null
 * Scaling Factor: 1
Your graphics card does not support non-power-of-2 textures. Some features might not work.
OpenGL Renderer Information
 * Vendor: Intel Inc.
 * Renderer: Intel HD Graphics 3000 OpenGL Engine
 * OpenGL Version: 2.1 INTEL-10.0.31
 * GLSL Version: 1.20
 * Profile: Compatibility
sRGB framebuffer is not supported by video hardware, but was requested.
Audio Device: Built-in Output
Audio Vendor: Apple Computer Inc.
Audio Renderer: Software
Audio Version: 1.1
ALC extensions: ALC_EXT_CAPTURE ALC_ENUMERATION_EXT ALC_EXT_MAC_OSX ALC_EXT_ASA ALC_EXT_ASA_DISTORTION ALC_EXT_ASA_ROGER_BEEP
AL extensions: AL_EXT_OFFSET AL_EXT_LINEAR_DISTANCE AL_EXT_EXPONENT_DISTANCE AL_EXT_float32 AL_EXT_STATIC_BUFFER AL_EXT_SOURCE_NOTIFICATIONS AL_EXT_SOURCE_SPATIALIZATION
AudioRenderer supports 64 channels
Pausing audio device not supported.
OpenAL EFX not available! Audio effects won't work.
No sRGB format available for 'Depth'. Failling back to linear.
No sRGB format available for 'RGBA8'. Failling back to linear.
org.lwjgl.opengl.OpenGLException: Invalid enum (1280)
	at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
	at com.jme3.system.lwjgl.LwjglOffscreenBuffer.checkGLError(LwjglOffscreenBuffer.java:98)
	at com.jme3.system.lwjgl.LwjglOffscreenBuffer.runLoop(LwjglOffscreenBuffer.java:126)
	at com.jme3.system.lwjgl.LwjglOffscreenBuffer.run(LwjglOffscreenBuffer.java:156)
	at java.lang.Thread.run(Thread.java:745)
Returning hash code of content
Checking page id -1 209 998 066 vs stored id -1 209 998 066

Oops, looks like the modern extension check was not working correctly… Fixed in master.
So OpenGL2.1 will work again now.

As for OpenGL3.2+ support, it seems we have no choice but to port our shaders to GLSL 1.5+ as that’s the only thing that is compatible. GLSL 1.1 shaders are not supported anymore once a core profile is requested.

3 Likes

That’s the occasion to hop on shader nodes then :smiley:

1 Like

Thanks! I’ve just checked my scene and found out that post water looks bit weird =) at the border of the screen where water is there is some strange effect…

what was before:

and after:

Should be fixed on latest master.

2 Likes

Thanks, works fine.

Hi,

I’m trying to run Unshaded.j3md on OpenGL3 (I used a mac on train). I converted existing .frag and .vert to GLSL150. And I tried to adapt Unshaded.j3md

MaterialDef Advanced Unshaded {

    MaterialParameters {
      ...
    }

    Technique {
        VertexShader GLSL100:   Common/MatDefs/Misc/Unshaded.vert
        FragmentShader GLSL100: Common/MatDefs/Misc/Unshaded.frag
        ...
    }

    Technique {
        VertexShader GLSL150:   Common/MatDefs/Misc/Unshaded15.vert
        FragmentShader GLSL150: Common/MatDefs/Misc/Unshaded15.frag
        ...
    }
    ...
}
   

But my test app always failed with error like if it load version GLSL 100 version.

com.jme3.renderer.RendererException: compile error in: ShaderSource[name=Common/MatDefs/Misc/Unshaded.frag, defines, type=Fragment, language=GLSL100]
ERROR: 0:1: '' :  version '110' is not supported
ERROR: 0:2: '' :  #version required and missing.
ERROR: 0:15: 'varying' : syntax error: syntax error

How to setup a Material Definition to provide GLSL110 and GLSL150 version ?

(I used jmonkeyengine master from 2 days ago).

Just a guess in the wild, what happens if you revert the ordering? Like defining GLSL150 before GLSL100?

@zzuegg Thanks, it works (modulo my glsl syntax error)