我在Qt5 for Mac OS 10.10上编写了OpenGL代码。 GLSL版本为120,运行没有问题。
#version 120
attribute highp vec4 vVertex;
attribute vec3 vNormal;
uniform mat4 mvpMatrix;
uniform mat4 mvMatrix;
uniform mat4 normalMatrix;
uniform vec3 vLightPosition;
varying vec3 vVaryingNormal;
varying vec3 vVaryingLightDir;
void main(void)
{
vVaryingNormal = mat3(normalMatrix) * vNormal;
vec4 vPosition4 = mvMatrix * vVertex;
vec3 vPosition3 = vPosition4.xyz / vPosition4.w;
vVaryingLightDir = normalize(vLightPosition-vPosition3);
gl_Position = mvpMatrix * vVertex;
}
当我尝试移动代码以编译并运行Andriod时,我得到了flowwing错误:
W/Qt (21457): (null):0 ((null)): QOpenGLShader::compile(Vertex): 0:1:
P0007: Language version '120' unknown, this compiler only supports up to
version '300 es'
为什么Andriod的QOpenGLShader不支持glsl 120?如何解决问题?
答案 0 :(得分:3)
Android使用OpenGL ES,而OpenGL ES和完整的OpenGL之间的GLSL版本不同。
OpenGL ES的有效版本为:
version 100
:ES 2.0。version 300 es
:ES 3.0。version 310 es
:ES 3.1。完整OpenGL的有效版本是:
version 110
:OpenGL 2.0。version 120
:OpenGL 2.1。version 130
:OpenGL 3.0。version 140
:OpenGL 3.1。version 150
:OpenGL 3.2。version 330
:OpenGL 3.3。version 400
:OpenGL 4.0。version 410
:OpenGL 4.1。version 420
:OpenGL 4.2。version 430
:OpenGL 4.3。version 440
:OpenGL 4.4。version 450
:OpenGL 4.5。从OpenGL 3.2(version 150
)开始,可以指定可选的配置文件。 3.3的有效版本字符串例如是:
#version 330
#version 330 core
#version 330 compatibility
在您的情况下,您可能希望使用支持所需功能集的最低ES版本。如果ES 2.0足够,您可以使用:
#version 100
如果你需要ES 3.0:
#version 300 es
您还可以使用预定义的GL_ES
预处理程序符号使版本成为条件,并对OpenGL ES和OpenGL使用相同的着色器代码:
#if GL_ES
#version 300 es
#else
#version 120
#endif