OpenGL|ES Shader代码量逐渐增大,在执行glLinkProgram时返回GL_FALSE,用glGetProgramiv获取不到错误信息。
直奔主题,Shader代码流程大致如下:float processTree(这里传入19个参数)
{
// 根据参数多次利用texture2D获取texture像素值
// 将这些获取到的像素值做一些float类型运算
// 得到一个返回值并返回
}
int stage0(float tmp)
{
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
float sum += processTree(...);
......
// 用sum和tmp进行比较,然后返回0或1
}
void main()
{
stage0(...);
}
代码编译没有报错,Shader编译也没有报错:
1. 当stage0中porcessTree的调用次为50次时,Shader进行link时没有报错,程序可以正确执行;
2. 当stage0中porcessTree的调用次为60次时,Shader的link过程报错,程序结束,但是用glGetProgramiv获取不到错误信息,错误信息为空。
给人的感觉就是OpenGL|ES好像是有某些限制,但是我们又不知道,导致在处理达到一定次数时,link就报错了。
有没有兄弟遇到过同样的问题,或是有自己的看法,欢迎大家回复。
找到出现这个问题的真正原因。
PS:已经被这个问题折腾了2个礼拜了,求高手解答。