多数のレンダリングターゲット/フレームバッファーを備えたアプリがあり、glDrawElementsへの1回の呼び出しで、デバイス(iPad iOS 5.0)でクラッシュしますが、シミュレーターではクラッシュしません。これは、数十の異なるシェーダーと数千の頂点バッファーを備えた非常にシェーダー集約型のアプリです。
問題をさらにデバッグすると、クラッシュは特定のシェーダーが原因で発生すると思いましたが、シェーダーは有効であり、書き込まれているフレームバッファーオブジェクトも有効です。
多数のレンダリングターゲット/フレームバッファーを備えたアプリがあり、glDrawElementsへの1回の呼び出しで、デバイス(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を削除したことを確認しました。