为什么递归WebGL函数不会导致堆栈溢出?

时间:2014-10-15 15:13:04

标签: recursion webgl stack-overflow

这是我关于StackOverflow的第一个问题,请原谅协议中的任何违规行为。

我在大学的计算机图形课上学习WebGL。在学习在屏幕上旋转正方形时,我的同学和我注意到渲染功能中的以下代码:

function render() 
{ 
 gl.clear(gl.COLOR_BUFFER_BIT); 
 theta += 0.1; 
 gl.uniform1f(thetaLoc, theta); 
 gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); 
 render(); 
}

我们不明白,而且我们的教授无法给出足够的答案,这就是为什么这段代码不会导致堆栈溢出,因为它会递归调用自身。我们运行代码,它不会导致任何问题,但我们不明白为什么。

我们无法在教科书或网上找到答案。如果有人能解释,我会把它传递给我的同学。提前谢谢。

1 个答案:

答案 0 :(得分:3)

这确实会导致堆栈溢出。当我运行它时,我得到了

Uncaught RangeError: Maximum call stack size exceeded 

我想你可能会看到像这样的代码

function render() {
   ...
   requestAnimationFrame(render);
}
render();

在这种情况下,它不是递归的。渲染功能正在请求动画帧然后退出。然后浏览器再次呈现它调用render的下一帧。