我有一个具有多个渲染目标/帧缓冲区的应用程序,并且在一次调用 glDrawElements 时它在设备(iPad iOS 5.0)上崩溃,但在模拟器中却没有。这是一个着色器密集型应用程序,具有十几个不同的着色器和数千个顶点缓冲区。
进一步调试这件事让我相信崩溃是由于特定的着色器而发生的,但着色器是有效的,正在写入的帧缓冲区对象也是如此。
我有一个具有多个渲染目标/帧缓冲区的应用程序,并且在一次调用 glDrawElements 时它在设备(iPad iOS 5.0)上崩溃,但在模拟器中却没有。这是一个着色器密集型应用程序,具有十几个不同的着色器和数千个顶点缓冲区。
进一步调试这件事让我相信崩溃是由于特定的着色器而发生的,但着色器是有效的,正在写入的帧缓冲区对象也是如此。
好的,经过大量的调试时间后,我发现我的景深着色器导致了崩溃,尤其是这个函数:
float GetNearFalloff( float Depth, float MinDist, float MaxDist)
{
float Range = MaxDist - MinDist;
if (Depth < MinDist)
return 1.0;
/*else*/if (Depth > MaxDist)
return 0.0;
float Blur = 1.0 - ( (Depth - MinDist) / Range );
return Blur;
}
基本上其他评论导致我的崩溃。删除它使一切正常。我实际上把它放回去了(我在想它可能是别的东西),只是看到在几次着色器重新编译后,同样的崩溃出现了同样的修复,删除了else。