複雑な if-else 決定木を使用して GLSL フラグメント シェーダーを実装しようとしています。残念ながら、シェーダー コンパイラはかなり早い段階で「構文エラー - メモリ不足」エラーで失敗します。GLSL のコード サイズまたは決定木の深さに関する制約はありますか? この問題を克服する方法について何か提案はありますか?
bool block1(float p[16], float cb, float c_b) {
if(p[6] > cb)
if(p[7] > cb)
if(p[8] > cb)
return true;
else
if(p[15] > cb)
return true;
else
return false;
else if(p[7] < c_b)
if(p[14] > cb)
if(p[15] > cb)
return true;
else
return false;
else if(p[14] < c_b)
if(p[8] < c_b)
if(p[9] < c_b)
if(p[10] < c_b)
if(p[11] < c_b)
if(p[12] < c_b)
if(p[13] < c_b)
if(p[15] < c_b)
return true;
else
return false; // ';' : syntax error memory exhausted
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
if(p[14] > cb)
if(p[15] > cb)
return true;
else
return false;
else
return false;
else if(p[6] < c_b)
if(p[15] > cb)
if(p[13] > cb)
if(p[14] > cb)
return true;
else
return false;
else if(p[13] < c_b)
if(p[7] < c_b)
if(p[8] < c_b)
if(p[9] < c_b)
if(p[10] < c_b)
if(p[11] < c_b)
if(p[12] < c_b)
if(p[14] < c_b)
return true;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
if(p[7] < c_b)
if(p[8] < c_b)
if(p[9] < c_b)
if(p[10] < c_b)
if(p[11] < c_b)
if(p[12] < c_b)
if(p[13] < c_b)
if(p[14] < c_b)
return true;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
if(p[13] > cb)
if(p[14] > cb)
if(p[15] > cb)
return true;
else
return false;
else
return false;
else if(p[13] < c_b)
if(p[7] < c_b)
if(p[8] < c_b)
if(p[9] < c_b)
if(p[10] < c_b)
if(p[11] < c_b)
if(p[12] < c_b)
if(p[14] < c_b)
if(p[15] < c_b)
return true;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
else
return false;
}