> 文章列表 > cesium-02 scene render2(tryAndCatchError(this, render))

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

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

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