Opengl es glGetShaderInfoLog返回空字符串,但着色器程序链接不正确

Opengl es glGetShaderInfoLog返回空字符串,但着色器程序链接不正确,opengl-es,opengl-es-2.0,glsl,Opengl Es,Opengl Es 2.0,Glsl,链接着色器程序后,当调用glGetUniformLocation时,我会得到GL\u INVALID\u操作。文档告诉我,这意味着我的着色器程序不存在,或者尚未成功链接 但是调用glGetShaderInfoLog不会返回任何错误,它只返回一个空字符串(在OpenTK上) 我怎样才能找出哪里出了问题?找到了。原因是多个不同的s和统一的s没有指定精度限定符: varying vec4 vPosition; 而不是 varying lowp vec4 vPosition; 这发生在iPhone5

链接着色器程序后,当调用
glGetUniformLocation
时,我会得到
GL\u INVALID\u操作。文档告诉我,这意味着我的着色器程序不存在,或者尚未成功链接

但是调用
glGetShaderInfoLog
不会返回任何错误,它只返回一个空字符串(在OpenTK上)


我怎样才能找出哪里出了问题?

找到了。原因是多个
不同的
s和
统一的
s没有指定精度限定符:

varying vec4 vPosition;
而不是

varying lowp vec4 vPosition;

这发生在iPhone5和iPhone模拟器上。奇怪的是,这不会在日志中生成语句。

不需要返回任何内容,尽管这会非常有用。您是否通过
glGetProgramiv(…)
检查
GL\u链接\u状态
——这实际上是确定程序链接是否正确的正确方法。尝试链接程序或调用
glValidateProgram(…)
后检查该值。使用
GL\u link\u STATUS
调用
glGetProgramiv
返回
GL\u FALSE
。但这并没有真正的帮助,我已经知道程序链接不正确。还在想为什么没有日志。除了编译,还有第二个日志<代码>glGetProgramInfoLog(…)
。这将为您提供链接器错误/警告的日志(每个程序),另一个日志(每个着色器)用于编译错误/警告。