/**
* OffscreenCanvas 매니저
* HTML Canvas 요소에서 OffscreenCanvas를 생성하고 워커를 통해 관리합니다.
*/
import { EventEmitter } from "eventemitter3";
import { CanvasCommand, OffscreenCanvasManagerOptions } from "./types.js";
/**
* OffscreenCanvas 매니저 클래스
* HTML Canvas 요소의 OffscreenCanvas 버전을 생성하고 워커와 통신합니다.
*/
export declare class OffscreenCanvasManager extends EventEmitter {
/** 원본 캔버스 요소 */
private canvas;
/** 워커 인스턴스 */
private worker;
/** 매니저 옵션 */
private options;
/** 오프스크린 캔버스가 전송되었는지 여부 */
private canvasTransferred;
/** 워커 준비 완료 상태 */
private workerReady;
/** 명령 ID 카운터 */
private commandIdCounter;
/** 대기 중인 명령 */
private pendingCommands;
/** 애니메이션 프레임 ID */
private animationFrameId;
/** 애니메이션 콜백 */
private animationCallback;
/** 마지막 애니메이션 타임스탬프 */
private lastAnimationTimestamp;
/** 애니메이션 시작 시간 */
private animationStartTime;
/** 리사이즈 옵저버 */
private resizeObserver;
/** 폴백 모드 사용 여부 */
private useFallbackMode;
/** 2D 컨텍스트 (폴백 모드용) */
private fallbackContext;
private timeoutManager;
/**
* OffscreenCanvasManager 생성자
* @param options 캔버스 매니저 옵션
*/
constructor(options: OffscreenCanvasManagerOptions);
/**
* 매니저 초기화
* @private
*/
private initialize;
/**
* 브라우저가 OffscreenCanvas API를 지원하는지 확인
* @private
* @returns API 지원 여부
*/
private isOffscreenCanvasSupported;
/**
* 폴백 컨텍스트 설정
* @private
*/
private setupFallbackContext;
/**
* 기본 워커 URL 생성
* @private
* @returns 기본 워커 URL
*/
private getDefaultWorkerUrl;
/**
* 캔버스 요소 설정
* @private
*/
private setupCanvas;
/**
* 워커 설정
* @private
*/
private setupWorker;
/**
* 캔버스를 워커로 전송
* @private
*/
private transferCanvasToWorker;
/**
* 명령 ID 생성
* @private
* @returns 고유 명령 ID
*/
private generateCommandId;
/**
* 명령을 워커에 전송
* @param command 캔버스 명령
* @param transferables 전송 가능한 객체 배열 (옵션)
* @returns 명령 실행 결과
*/
sendCommand(command: CanvasCommand, transferables?: Transferable[]): Promise;
/**
* 명령에서 Transferable 객체 자동 감지
* @private
* @param command 캔버스 명령
* @returns 감지된 Transferable 객체 배열
*/
private detectTransferables;
/**
* 객체 내에서 Transferable 객체 찾기 (재귀적)
* @private
* @param obj 검사할 객체
* @param transferables 찾은 Transferable 객체를 추가할 배열
*/
private findTransferablesInObject;
/**
* Transferable 객체 타입 요약 생성
* @private
* @param transferables Transferable 객체 배열
* @returns 타입 요약 문자열
*/
private getTransferableTypeSummary;
/**
* 폴백 모드에서 명령 실행
* @private
* @param command 캔버스 명령
* @returns 명령 실행 결과
*/
private executeFallbackCommand;
/**
* 워커 메시지 핸들러
* @private
* @param event 메시지 이벤트
*/
private handleWorkerMessage;
/**
* 명령 응답 처리
* @private
* @param message 워커 메시지
*/
private handleCommandResponse;
/**
* 워커 이벤트 처리
* @private
* @param message 워커 메시지
*/
private handleWorkerEvent;
/**
* 워커 오류 핸들러
* @private
* @param error 오류 이벤트
*/
private handleWorkerError;
/**
* 리사이즈 옵저버 설정
* @private
*/
private setupResizeObserver;
/**
* 캔버스 크기 변경
* @param width 새 너비 (픽셀)
* @param height 새 높이 (픽셀)
* @returns 크기 변경 결과
*/
resize(width: number, height: number): Promise;
/**
* 캔버스 지우기
* @returns 지우기 결과
*/
clear(): Promise;
/**
* 렌더링 명령 전송
* @param params 렌더링 매개변수
* @returns 렌더링 결과
*/
render(params?: any): Promise;
/**
* 애니메이션 시작
* @param callback 애니메이션 프레임마다 호출될 콜백 함수
*/
startAnimation(callback: (timestamp: number) => CanvasCommand | null): void;
/**
* 애니메이션 루프
* @private
* @param timestamp 현재 타임스탬프
*/
private animationLoop;
/**
* 애니메이션 중지
*/
stopAnimation(): void;
/**
* 객체 정리
*/
dispose(): void;
/**
* 디버그 로그 출력
* @private
* @param message 로그 메시지
* @param args 추가 매개변수
*/
private log;
/**
* 오류 로그 출력
* @private
* @param message 오류 메시지
* @param args 추가 매개변수
*/
private error;
}