Qt QOpenGLShader罐';t在Android上编译GLSL 120
我已经为MacOS10.10在Qt5上编写了OpenGL代码。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;
#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的有效版本包括:
:ES 2.0版本100
:es 3.0版本300 es
:es 3.1310版es
:OpenGL 2.0version110
:OpenGL 2.1版本120
:OpenGL 3.0version 130
:OpenGL 3.1版本140
:OpenGL 3.2version150
:OpenGL 3.3version 330
:OpenGL 4.0version400
:OpenGL 4.1版本410
:OpenGL 4.2版本420
:OpenGL 4.3版本430
:OpenGL 4.4版本440
:OpenGL 4.5版本450
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是的,有点像。我不确定这个问题是否有足够的实质内容来给出真正的答案。我现在加了一个。谢谢你的回答。