gpt4 book ai didi

c++ - 禁止 GLSL 中的递归?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:29 25 4
gpt4 key购买 nike

我在尝试编写以下递归调用时遇到了这个错误。我看过很多 GLSL 递归光线追踪实现的演示,所以我假设 GLSL 支持递归。

不是这样吗?

OpenGL 正在返回一条编译时错误消息:

Error: Function trace(vec3, vec3, vec3, int) has static recursion

这是我的函数定义:

vec3 trace(vec3 origin, vec3 direction, vec3 illum, int order) 
{
float dist;
int s_index = getSphereIntersect(origin, direction, dist);
//if light hit
float light_dist = 200;
for(int k = 0; k < L_COUNT;k++)
if(s_intersects(l_center[k], l_radius[k],
origin, direction,
light_dist))
if(light_dist < dist )
return l_color[k]; //light is pure color

if (s_index != -1)
{
illum = s_color[s_index];
for(int j = 0; j < L_COUNT; j++)
{
float ambient = 0.68;
float diffuse = 0.5;
vec3 poi = view + (direction * dist);
vec3 li_disp = normalize( poi - l_center[j]);
vec3 poi_norm = s_normal(s_center[s_index], s_radius[s_index], poi);
float shade= dot(li_disp, normalize(poi_norm));
if(shade < 0) shade = 0;
illum = illum*l_color[j]*ambient + diffuse * shade;
//test shadow ray onto objects, if shadow then 0
if(order > 0)
illum = trace(poi+.0001*poi_norm, poi_norm, illum, order-1);
}
}
else
illum = vec3(0,0,0);
return illum;
}

最佳答案

I assumed that GLSL supported recursion

没有。 GLSL 不支持或者更好的说法是允许递归函数调用。

GLSL does not. The GLSL memory model does not allow for recursive function calls. This allows GLSL to execute on hardware that simply doesn't allow for recursion. It allows GLSL to function when there is no ability to write arbitrarily to memory, which is true of most shader hardware (though it is becoming less true with time).

So, no recursion in GLSL. Of any kind.

OpenGL Wiki – Core Language (GLSL)

Recursion is not allowed, not even statically. Static recursion is present if the static function-call graph of a program contains cycles. This includes all potential function calls through variables declared as subroutine uniform (described below). It is a compile-time or link-time error if a single compilation unit (shader) contains either static recursion or the potential for recursion through subroutine variables.

GLSL 4.5 Specification, Page 115

关于c++ - 禁止 GLSL 中的递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43601521/

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