import type { FpsUpdatePayload, FrameTickPayload } from '../../common/CommonTypes.js';
/**
 * @module
 * @description
 * Message types / utils for communication between the main worker and the
 * worker worker.
 */
/**
 * Defines the shape of a message sent from the main worker to the worker
 */
export interface ThreadXRendererMessage {
    type: string;
}
/**
 * An initialization message sent from the main worker to the renderer worker
 */
export interface ThreadXRendererInitMessage extends ThreadXRendererMessage {
    type: 'init';
    canvas: OffscreenCanvas;
    appWidth: number;
    appHeight: number;
    txMemByteThreshold: number;
    boundsMargin: number | [number, number, number, number];
    deviceLogicalPixelRatio: number;
    devicePhysicalPixelRatio: number;
    clearColor: number;
    fpsUpdateInterval: number;
    enableContextSpy: boolean;
    numImageWorkers: number;
    coreExtensionModule: string | null;
}
/**
 * A message sent from the main worker to the renderer worker to release a
 * texture
 */
export interface ThreadXRendererReleaseTextureMessage extends ThreadXRendererMessage {
    type: 'releaseTexture';
    textureDescId: number;
}
/**
 * A message sent from the renderer worker to the main worker to update the FPS
 */
export interface ThreadXRendererFpsUpdateMessage extends ThreadXRendererMessage {
    type: 'fpsUpdate';
    fpsData: FpsUpdatePayload;
}
/**
 * A message sent from the renderer worker to the main worker to update the FPS
 */
export interface ThreadXRendererFrameTickMessage extends ThreadXRendererMessage {
    type: 'frameTick';
    frameTickData: FrameTickPayload;
}
/**
 * A map of message types to message shapes
 */
export interface ThreadXRendererMessageMap {
    init: ThreadXRendererInitMessage;
    releaseTexture: ThreadXRendererReleaseTextureMessage;
    fpsUpdate: ThreadXRendererFpsUpdateMessage;
    frameTick: ThreadXRendererFrameTickMessage;
}
/**
 * Type guard util for a message sent from the main worker to the renderer worker
 *
 * @param type
 * @param message
 * @returns
 */
export declare function isThreadXRendererMessage<Type extends keyof ThreadXRendererMessageMap>(type: Type, message: unknown): message is ThreadXRendererMessageMap[Type];
