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

标签 recursion webgl stack-overflow

这是我在 StackOverflow 上的第一个问题,所以请原谅任何违反协议(protocol)的行为。

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

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

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

我们无法在教科书或网上找到这个问题的答案。如果有人能解释一下,我会把它转给我的同学。提前致谢。

最佳答案

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

Uncaught RangeError: Maximum call stack size exceeded 

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

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

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

关于recursion - 为什么递归 WebGL 函数不会导致堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26386019/

相关文章:

Javascript匿名函数错误

c - 递归增量器

javascript - Three.js 多重聚光灯性能

opengl-es - 在一个着色器 channel 中渲染多个纹理

c# - Windows Server 2008R2 IIS Appcrash - System.StackOverflowException

c - 在C中逐位递归地求和两个数字

java - 如何在 try-catch block 中递归调用方法

shader - 如何在 WebGL 中使用数据纹理

java - Camel的recipientList太长会导致StackOverflow错误

c++ - 我的 2D 迷宫解算器无限递归并且出现堆栈溢出 - 为什么?