Cesium 中 DerivedCommand 的作用

Cesium 中 DerivedCommand 的作用

根据代码看,DerivedCommand 主要实现了以下几点:

    1. 从原始 shader 程序派生出仅写深度(depth only)的 shader 程序和渲染状态。通过 getDepthOnlyShaderProgramgetDepthOnlyRenderState 实现。
    1. 创建仅写深度的 DerivedCommand,通过 createDepthOnlyDerivedCommand 实现。
      从原始 shader 程序派生出输出日志深度(log depth)的 shader 程序。通过 getLogDepthShaderProgram 实现。
    1. 创建输出日志深度的 DerivedCommand,通过 createLogDepthCommand 实现。
      从原始 shader 程序派生出 picking pass 使用的 shader 程序。通过 getPickShaderProgram 实现。
    1. 创建 picking pass 使用的 DerivedCommand,通过 createPickDerivedCommand 实现。
      从原始 shader 程序派生出 HDR 渲染使用的 shader 程序。通过 getHdrShaderProgram 实现。
    1. 创建 HDR 渲染使用的 DerivedCommand,通过 createHdrCommand 实现。

总结一下, DerivedCommand 通过派生出不同用途的 shader 程序和对应的渲染状态, 从原始 DrawCommand 创建出各种 DerivedCommand,比如仅写深度、对数深度、picking pass 以及 HDR 渲染所需的 DerivedCommand。这些功能可以避免重复编写类似代码,提供了很好的代码复用。

// 更新派生命令
fn updateDerivedCommands() {
  //...
  if (defined(command.pickId)) {
    // derivedCommands 是更加command的参数生成的
    derivedCommands.picking = DerivedCommand.createPickDerivedCommand(
      scene,
      command,
      context,
      derivedCommands.picking
    );
  }
  //...
}

你可能感兴趣的:(cesium原理,cesium)