但是我仍然遇到着色器的问题:我无法使用glCompileShader在qt上编译它们,因为几乎每个关键字(lowp,vec4,vec2 ......)都返回了编译错误。所以我用QGLShader程序编译它,但我不得不指定“#version 120”,最接近es2。但是,我的精灵没有显示正确的大小,唯一可能影响iOS的不同代码片段是着色器编译/版本。我认为着色器中的问题是gl_PointSize在qt的顶点着色器编译中没有改变任何东西。
有没有更好的方法让我在qt上编译着色器就像在iOS上一样? (我知道glsl es2版本来自120版,但我不知道它们的差异程度如何)。
我的着色器,在iOS上运行良好但在Qt上运行良好:
const GLchar vShaderStr[] =
#ifdef QT_OPENGL_LIB
"#version 120\n"
#endif //QT_OPENGL_LIB
"attribute lowp vec4 Position;\n"
"attribute mediump vec2 TextureCoord;\n"
"attribute lowp float Weight;\n"
"uniform mat4 MVP;\n"
"varying mediump vec2 TextureCoordOut;\n"
"void main(void)\n"
"{\n"
" gl_Position = MVP * Position;\n"
" TextureCoordOut = TextureCoord;\n"
" gl_PointSize = Weight;\n"
"}\n";
const GLchar fShaderStr[] =
#ifdef QT_OPENGL_LIB
"#version 120\n"
#endif //QT_OPENGL_LIB
"varying mediump vec2 TextureCoordOut;\n"
"uniform sampler2D Sampler;\n"
"uniform bool IsSprite;\n"
"uniform lowp vec3 TextureColor;\n"
"uniform lowp float Opacity;\n"
"void main(void)\n"
"{\n"
" lowp vec4 textureColorResult;\n"
" textureColorResult = texture2D(Sampler, IsSprite ? gl_PointCoord : TextureCoordOut);\n"
" gl_FragColor = IsSprite ? vec4(mix(textureColorResult.rgb,TextureColor, 1.0),\n"
" textureColorResult.a * Opacity) : textureColorResult;\n"
"}\n";
答案 0 :(得分:0)
终于解决了这个问题!
我保留了#version 120并找到了它所缺少的功能,就像在设备上一样。 在具有qt(现在5.0)的桌面上,您必须激活以下似乎在iOS上默认的gl函数:
glEnable(GL_POINT_SPRITE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);