/** * 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; }