gpt4 book ai didi

macos - 使用 const 时,OSX 上的 Opengl es 2.0 GLSL 编译失败

转载 作者:行者123 更新时间:2023-12-01 16:12:52 24 4
gpt4 key购买 nike

我有点沮丧。我即将使用mac(OS X mavericks)进行编码。

我的着色器在 Windows 7 和 android 下运行良好。当我在 OS X 下运行我的应用程序时,我在运行时遇到以下编译器错误。

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'

片段着色器片段:

 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)"+
....

我已经通过 OpenGL 规范,发现使用 const 或在 main 中声明一些变量没有任何问题。

感谢您的帮助

最佳答案

我将在此处重新发表我的评论,以便可以将其关闭,但似乎 OS X 上的 GLSL 编译器不喜欢这一行:

const vec3 light =  normalize(vec3(-0.5,-0.8,-1.0));

计算值被分配给一个常数。它可能不会像其他编译器那样优化它。用它产生的结束向量替换归一化应该可以解决这个问题。

如果您认为这是一个错误,我建议您将其提交至 http://bugreport.apple.com ,因为我知道 Apple 的 OpenGL 驱动程序团队确实关注此类情况,并且过去已修复它们。

关于macos - 使用 const 时,OSX 上的 Opengl es 2.0 GLSL 编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com