title: Recursion in GLSL prohibited?
body: <p>I ran into this error when trying to write the following recursive call. I have seen a lot of demos of implementations of recursive Ray tracing in GLSL so I assumed that GLSL supported recursion. </p>
  
  <p>Is this not the case?</p>
  
  <p>OpenGL is returning a compile time error message:</p>
  
  <pre><code>Error: Function trace(vec3, vec3, vec3, int) has static recursion
  </code></pre>
  
  <p>This is my function definition:</p>
  
  <pre><code>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 &lt; L_COUNT;k++)      
         if(s_intersects(l_center[k], l_radius[k], 
               origin, direction, 
               light_dist)) 
               if(light_dist &lt; dist )             
                   return l_color[k]; //light is pure color  
  
     if (s_index != -1)
     {
         illum = s_color[s_index];
         for(int j = 0; j &lt; 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 &lt; 0) shade = 0;
              illum = illum*l_color[j]*ambient + diffuse * shade; 
              //test shadow ray onto objects, if shadow then 0    
              if(order &gt; 0)
                    illum = trace(poi+.0001*poi_norm, poi_norm, illum, order-1); 
          }   
      }   
      else
          illum = vec3(0,0,0);
      return illum; 
  }
  </code></pre>