Opengl es 2.0 GLSL compiling fails on OSX when using const
glsl, libgdx, macos, opengl-es, osx-mavericks
Solution
I'll repost my comment here so that this could be closed out, but it appears that the GLSL compiler on OS X didn't like this line:
const vec3 light = normalize(vec3(-0.5,-0.8,-1.0));
where a calculated value was being assigned to a constant. It may not optimize that out, where other compilers do. Replacing the normalization with the end vector it produces should fix this.
If you think this is a bug, I recommend filing it at http://bugreport.apple.com , because I know Apple's OpenGL driver team does pay attention to cases like this and has fixed them in the past.
Problem
i'm a little frustrated. I'm about to use a mac (OS X mavericks) for coding stuff. My shader works fine under windows 7 and android. When i'm running my app under OS X i'm getting the following compiler errors during runtime. ``` Exception in thread "LWJGL Application" java.lang.IllegalStateException: ERROR: 0:6: Initializer not allowed ERROR: 0:6: Use of undeclared identifier 'light' ERROR: 0:6: Use of undeclared identifier 'spec' ERROR: 0:6: Use of undeclared identifier 'spec' ERROR: 0:6: Use of undeclared identifier 'spec' ``` Fragment Shader Snippet: ``` String fragmentShader = "#ifdef GL_ES\n" + "precision mediump float;\n" + "#endif\n" + "uniform sampler2D cubeMap;\n"+ "uniform sampler2D normalMap;"+ "varying vec2 v_TexCoords;"+ "void main() {\n"+ " const vec4 ambientColor = vec4(1.0, 1.0, 1.0, 1.0);" + " const vec4 diffuseColor = vec4(1.0, 1.0, 1.0, 1.0);"+ " const vec3 light = normalize(vec3(-0.5,-0.8,-1.0));"+ " vec3 camDir = normalize(vec3(v_TexCoords,0) - vec3(0.5,0.5,10.0));"+ " vec4 normalPxl = texture2D(normalMap,v_TexCoords);" + " vec3 normal = normalize(normalPxl.xyz - vec3(0.5,0.5,0.5));"+ " vec3 reflectDir = reflect(camDir,normal);"+ " float spec = pow(max(0.0,dot(camDir,reflect(light,normal))),4.0);"+ " gl_FragColor = vec4(texture2D(cubeMap, reflectDir.xy * 0.5+0.5).xyz,normalPxl.w-0.1)"+ .... ``` I've red through OpenGL Specs and found nothing problematic with using const or declaring some variables in main. Appreciate your Help