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
    );
  }
  //...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值