gpt4 book ai didi

memory - GLSL编译错误 “memory exhausted”

转载 作者:行者123 更新时间:2023-12-02 10:44:07 27 4
gpt4 key购买 nike

我正在尝试使用复杂的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;
}

最佳答案

我将不知所措,因为我对着色器语言一无所知。

1.使用逻辑组合(和,或)

但是我知道一般的逻辑和许多编程语言。像这样的构造很有可能是:

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;

可以等效地用以下(单个) bool(boolean) 表达式表示:
return (p[8] < c_b)
&& (p[9] < c_b)
&& (p[10] < c_b)
&& (p[11] < c_b)
&& (p[12] < c_b)
&& (p[13] < c_b)
&& (p[15] < c_b);

您可能需要使用 and而不是 &&,具体取决于特定语言的语法。

2.消除冗余

我注意到至少有两个“子树”完全相同。更具体地说,例如第57行(为方便起见,此处为压缩格式):
    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;

与#83行完全相同
   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

仅将 (p[13] < c_b)条件移到末尾。您很有可能可以合并发生这种情况的分支。

我建议不要制作一个真值表(只需映射所有可能的输入),并推导出一个 bool(boolean) 表达式以从中生成结果值,而不要手动执行此过程。

关于memory - GLSL编译错误 “memory exhausted”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15828966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com