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);
};