我有一些非常简单的着色器代码,它在S2上失败,只有S2。
precision highp float;
varying vec4 v_colour;
uniform mat4 proj_cam;
uniform mat4 trans;
attribute vec4 vp; //vertex xyz from buffer.
attribute vec4 vc; //vertex colour, from buffer. Standard 32bit value.
void main()
{
v_colour = vc;
gl_Position = proj_cam * (trans * vp);
};
precision mediump float;
varying vec4 v_colour;
void main()
{
gl_FragColor = v_colour;
}
在S2上,无法呈现任何输出。如果我删除管道的颜色部分或删除单独的视图和模型矩阵并将它们组合起来就可以了。更糟糕的是,使用相同的着色器代码只使用一个有效的矩阵,然后添加“uniform mat4 trans”;但不要使用足以使渲染失败的行。 GL输出没有错误。 我在Java中这样做,我可以用C / C ++重新编写它,看看它是否有效,但我认为不会。
此代码适用于其他手机,包括我的旧2.2 ZT-180平板电脑!
我可以补充说,有些游戏在我的S2上失败了,其他游戏工作正常。
我已经编写GLES 2.0几年了,这款手机让我很难过。我一直在大喊大叫! ;)
答案 0 :(得分:1)
我终于发现了我的错误,我错误地使用了'glBindAttribLocation'。
在使用我多年来编写的旧C / C ++ GLES 2.0代码作为参考时,我没有注意到在链接着色器之前我一直在调用glBindAttribLocation。必须在编译之后但在链接之前完成。
逐行浏览我的代码并阅读每个函数的文档后,我发现了这一点。只是去展示,即使是经验丰富的编码员也可以滑倒。 :)
本来很高兴。 GL有错误 问题是,为什么它在我试过的其他手机上工作?.......
答案 1 :(得分:0)
您检查过AndroidManifest.xml吗? 我遇到了类似的情况,并使用下面的声明来解决它
<uses-feature android:glEsVersion="0x00020000"/>
请确保它不是
android:glEsVersion="2" //Wrong