Python微信订餐小程序课程视频
https://blog.csdn.net/m0_56069948/article/details/122285951
Python实战量化交易理财系统
https://blog.csdn.net/m0_56069948/article/details/122285941
目录* 回顾
+ 预备知识:指令
+ 预备知识:通道
回顾
书接上文,Scene.js
模块内的 render
函数会将控制权交给 WebGL,执行 CesiumJS 自己封装的指令对象,画出每一帧来。
模块内的 render
函数首先会更新一批状态信息,譬如帧状态、雾效、Uniform 值、通道状态、三维场景中的环境信息等,然后就开始更新并执行指令,调用的是 Scene
原型链上的 updateAndExecuteCommands
方法。
整个过程大致的调用链是这样的(function
关键字简写为 fn
):
[Module Scene.js]
- fn render()
- Scene.prototype.updateAndExecuteCommands()
- fn executeCommandsInViewport()
- fn updateAndRenderPrimitives()
[Module Primitive.js]
- fn createCommands()
- fn updateAndQueueCommands()
- fn executeCommands()
- fn executeCommand()
本篇讲解的是从 Scene
原型链上的 updateAndExcuteCommands()
方法开始,期间 Scene 中的 Primitives 是如何创建指令,又最终如何被 WebGL 执行的。
这个过程涉及非常多细节代码,但是为了快速聚焦整个过程,本篇先介绍两个 CesiumJS 封装的概念:指令和通道。
预备知识:指令
WebGL 是一种依赖于“全局状态”的绘图 API,面向对象特征比较弱,为了修改全局状态上的顶点数据、着色器程序、帧缓冲、纹理等“资源”,必须通过 gl.XXX
函数调用触发全局状态的改变。
而图形编程基础提出的渲染管线、通道等概念偏向于面向对象,显然 WebGL 这种偏过程的风格需要被 Ja