{"version":3,"file":"TransitionElement.cjs","sources":["../../../src/elements/TransitionElement.js"],"sourcesContent":["/**\n * 转场元素 - 使用 gl-transitions 渲染转场效果\n */\nimport { BaseElement } from './BaseElement.js';\nimport { DEFAULT_ELEMENT_CONFIG } from '../types/constants.js';\nimport { deepMerge } from '../utils/helpers.js';\nimport { ElementType } from '../types/enums.js';\nimport { TransitionRenderer } from '../utils/transition-renderer.js';\nimport { createCanvas } from '@napi-rs/canvas';\n\n/**\n * 转场元素类\n */\nexport class TransitionElement extends BaseElement {\n  // 静态变量：累计所有转场渲染的总时间\n  static totalTransitionTime = 0;\n  static transitionRenderCount = 0;\n\n  constructor(config = {}) {\n    super(config);\n    this.type = ElementType.TRANSITION || 'transition';\n    this.config = deepMerge({}, DEFAULT_ELEMENT_CONFIG, config);\n    \n    this.fromComposition = config.fromComposition; // 源场景合成\n    this.toComposition = config.toComposition; // 目标场景合成\n    this.transitionConfig = config.transitionConfig || {}; // 转场配置\n    this.transitionRenderer = null;\n    this.transitionFunction = null;\n    \n    // 转场时间范围\n    this.startTime = config.startTime || 0;\n    this.endTime = config.endTime || Infinity;\n    this.duration = config.duration || 0.5;\n    \n    if (this.duration !== undefined && this.endTime === Infinity) {\n      this.endTime = this.startTime + this.duration;\n    }\n    \n    // 初始化转场渲染器（延迟初始化，避免在构造函数中抛出错误）\n    this.transitionRenderer = null;\n    if (this.transitionConfig.name) {\n      try {\n        this.transitionRenderer = new TransitionRenderer(this.transitionConfig);\n      } catch (error) {\n        console.warn(`转场渲染器初始化失败: ${this.transitionConfig.name}`, error);\n        this.transitionRenderer = null;\n      }\n    }\n  }\n\n  /**\n   * 初始化转场渲染函数\n   */\n  async initTransitionFunction(width, height) {\n    if (!this.transitionRenderer || !this.transitionConfig.name) {\n      return;\n    }\n\n    if (!this.transitionFunction) {\n      this.transitionFunction = this.transitionRenderer.create({\n        width,\n        height,\n        channels: 4,\n      });\n    }\n  }\n\n  /**\n   * 将 Canvas 转换为 Buffer (RGBA)\n   */\n  canvasToBuffer(canvas) {\n    const ctx = canvas.getContext('2d');\n    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    return Buffer.from(imageData.data);\n  }\n\n  /**\n   * 将 Buffer (RGBA) 转换为 Canvas\n   */\n  bufferToCanvas(buffer, width, height) {\n    const canvas = createCanvas(width, height);\n    const ctx = canvas.getContext('2d');\n    const imageData = ctx.createImageData(width, height);\n    // Node.js Buffer 转换为 Uint8Array 以兼容 Uint8ClampedArray.set()\n    const uint8Data = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n    imageData.data.set(uint8Data);\n    ctx.putImageData(imageData, 0, 0);\n    return canvas;\n  }\n\n  /**\n   * 渲染转场元素（使用 Paper.js）\n   * 注意：转场效果需要预先渲染两个合成，然后使用 gl-transitions 混合\n   */\n  render(layer, time) {\n    if (!this.isActiveAtTime(time)) {\n      return null;\n    }\n\n    if (!this.fromComposition || !this.toComposition) {\n      return null;\n    }\n\n    // 转场效果需要特殊处理，这里暂时返回 null\n    // 实际转场效果应该在 VideoExporter 中处理，因为它需要渲染两个合成\n    // 或者可以在这里渲染两个合成的 canvas，然后使用 gl-transitions 混合\n    console.warn('TransitionElement.render() 在 Paper.js 中需要特殊处理，转场效果建议在 VideoExporter 中处理');\n    return null;\n  }\n\n  /**\n   * 获取转场渲染统计信息\n   * @returns {Object} { totalTime, count, averageTime }\n   */\n  static getTransitionStats() {\n    return {\n      totalTime: TransitionElement.totalTransitionTime,\n      count: TransitionElement.transitionRenderCount,\n      averageTime: TransitionElement.transitionRenderCount > 0\n        ? TransitionElement.totalTransitionTime / TransitionElement.transitionRenderCount\n        : 0,\n    };\n  }\n\n  /**\n   * 重置转场统计信息\n   */\n  static resetTransitionStats() {\n    TransitionElement.totalTransitionTime = 0;\n    TransitionElement.transitionRenderCount = 0;\n  }\n\n  /**\n   * 打印转场统计信息\n   */\n  static printTransitionStats() {\n    const stats = TransitionElement.getTransitionStats();\n    if (stats.count > 0) {\n      console.log(`\\n转场渲染统计:`);\n      console.log(`  总渲染次数: ${stats.count}`);\n      console.log(`  总耗时: ${(stats.totalTime / 1000).toFixed(2)} 秒`);\n      console.log(`  平均耗时: ${(stats.averageTime).toFixed(2)} 毫秒/帧`);\n    }\n  }\n}\n\n"],"names":["BaseElement","ElementType","deepMerge","DEFAULT_ELEMENT_CONFIG","TransitionRenderer","canvas","createCanvas"],"mappings":"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"}