cesium-02 scene render2(tryAndCatchError(this, render))

在这里插入图片描述
function render中发生了什么?看下面
在这里插入图片描述
整理发现有下面几个步骤需要分析一下:
scene.globe.beginFrame(frameState);
scene.updateAndExecuteCommands(passState, backgroundColor);
scene.globe.endFrame(frameState);

scene.globe.beginFrame(frameState);

好像没什么重要的操作,就是reset相关

Globe.prototype.beginFrame = function (frameState) {
   ...
   surface.beginFrame(frameState);
}
QuadtreePrimitive.prototype.beginFrame = function (frameState) {
 
}

scene.updateAndExecuteCommands(passState, backgroundColor);

Scene.prototype.updateAndExecuteCommands = function (){
...
executeCommandsInViewport(true, this, passState, backgroundColor);
}

这里到updateAndRenderPrimitives方法,比较重要,单独开一篇幅分析

function executeCommandsInViewport(firstViewport,scene,passState,backgroundColor){
 ...
 updateAndRenderPrimitives(scene);
 executeCommands(scene, passState); // 
}

继续看executeCommands

function executeCommands(scene, passState) {
...
executeCommand(commands[j], scene, context, passState);
}

executeCommand

function executeCommand(command, scene, context, passState, debugFramebuffer) {
...
command.execute(context, passState);
}
DrawCommand.prototype.execute = function (context, passState) {
  context.draw(this, passState);
};

进入Context进行绘制

Context.prototype.draw = function (
  drawCommand,
  passState,
  shaderProgram,
  uniformMap
) {
  //>>includeStart('debug', pragmas.debug);
  Check.defined("drawCommand", drawCommand);
  Check.defined("drawCommand.shaderProgram", drawCommand._shaderProgram);
  //>>includeEnd('debug');

  passState = defaultValue(passState, this._defaultPassState);
  // The command's framebuffer takes presidence over the pass' framebuffer, e.g., for off-screen rendering.
  var framebuffer = defaultValue(
    drawCommand._framebuffer,
    passState.framebuffer
  );
  var renderState = defaultValue(
    drawCommand._renderState,
    this._defaultRenderState
  );
  shaderProgram = defaultValue(shaderProgram, drawCommand._shaderProgram);
  uniformMap = defaultValue(uniformMap, drawCommand._uniformMap);

  beginDraw(this, framebuffer, passState, shaderProgram, renderState);
  continueDraw(this, drawCommand, shaderProgram, uniformMap);
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值