Qt QOpenGLShader罐';t在Android上编译GLSL 120

Qt QOpenGLShader罐';t在Android上编译GLSL 120,qt,opengl-es-2.0,shader,Qt,Opengl Es 2.0,Shader,我已经为MacOS10.10在Qt5上编写了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;

我已经为MacOS10.10在Qt5上编写了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?如何解决这个问题

Android使用OpenGL ES,OpenGL ES和完整OpenGL之间的GLSL版本不同

OpenGL ES的有效版本包括:

  • 版本100
    :ES 2.0
  • 版本300 es
    :es 3.0
  • 310版es
    :es 3.1
完整OpenGL的有效版本包括:

  • version110
    :OpenGL 2.0
  • 版本120
    :OpenGL 2.1
  • version 130
    :OpenGL 3.0
  • 版本140
    :OpenGL 3.1
  • version150
    :OpenGL 3.2
  • version 330
    :OpenGL 3.3
  • version400
    :OpenGL 4.0
  • 版本410
    :OpenGL 4.1
  • 版本420
    :OpenGL 4.2
  • 版本430
    :OpenGL 4.3
  • 版本440
    :OpenGL 4.4
  • 版本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

因为Android支持OpenGL ES,而不是完整的OpenGL<代码>120不是ES的有效GLSL版本。您可能想使用
100 es
(对于es 2.0)或
300 es
(对于es 3.0)。使用“#version 100 es”而不是“#version 120”?@RetoKoradi-这是对问题的实际回答。@keaukraine是的,有点像。我不确定这个问题是否有足够的实质内容来给出真正的答案。我现在加了一个。谢谢你的回答。