{ This file is part of the Fresnel Library. Copyright (c) 2025 by the FPC & Lazarus teams. Pas2js Fresnel interface - Inter-worker messages API See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} {$mode objfpc} {$h+} {$modeswitch externalclass} {$modeswitch advancedrecords} {$DEFINE IMAGE_USEOSC} unit fresnel.messages.pas2js.wasmapi; interface uses SysUtils, Types, Rtl.WorkerCommands, JS, WebOrWorker, fresnel.wasm.shared; const cmdFresnel = 'fresnel'; // Atomic calls cFresnel_Message_Call = 'fresnel_call'; cFresnel_Message_DOCOW = 'fresnel_docow'; // Fire & forget cFresnel_EnqueueEvent = 'fresnel_enqueue_event'; cFresnel_RequestAnimationFrame = 'fresnel_raf'; cFresnel_Tick = 'fresnel_tick'; cFresnel_MenuClick = 'fresnel_menuclick'; cFresnel_EnumerateUserMedia = 'fresnel_usermedia_enum'; cFresnel_UserMediaFrame = 'fresnel_usermedia_frame'; // Host options cFresnel_Message_MenuSupport = 'menu-support'; type { TFresnelMessage } TFresnelMessage = class external name 'Object' (TCustomWorkerCommand) Typ : String; external name 'type'; end; { TFresnelMessageHelper } TFresnelMessageHelper = class helper (TCustomWorkerCommandHelper) for TFresnelMessage class function newMessage(aType : String) : TFresnelMessage; static; end; { TFresnelMessage_EnqueueEvent } TFresnelMessage_EnqueueEvent = class external name 'Object' (TFresnelMessage) Event : TJSObject; external name 'event'; end; { TFresnelMessage_RequestAnimationFrame } TFresnelMessage_RequestAnimationFrame = class external name 'Object' (TFresnelMessage) Timestamp : Double; external name 'timestamp'; UserData : TWasmPointer; external name 'userData'; end; { TFresnelMessage_EnumerateUserMedia } TFresnelMessage_EnumerateUserMedia = class external name 'Object' (TFresnelMessage) UserMediaData : String; external name 'userMediaData'; UserData : TWasmPointer; external name 'userData'; end; { TFresnelMessage_UserMediaFrame } TFresnelMessage_UserMediaFrame = class external name 'Object' (TFresnelMessage) Timestamp : Double; external name 'timestamp'; VideoID : TVideoElementID; external name 'videoID'; ImageBitmap : TJSImageBitmap; external name 'imageBitmap'; end; { TFresnelMessage_HandleMenuClick } TFresnelMessage_HandleMenuClick = class external name 'Object' (TFresnelMessage) MenuID : TMenuID; external name 'menuID'; UserData : TWasmPointer; external name 'userData'; end; { TFresnelAtomicMessage } TFresnelAtomicMessage = class external name 'Object' (TFresnelMessage) ID : Integer; external name 'id'; Atomic : TJSInt32Array; external name 'atomic'; end; { TFresnelMessage_FunctionCall } TFresnelMessage_FunctionCall = class external name 'Object' (TFresnelAtomicMessage) FuncName : String; external name 'funcName'; Args : TJSValueDynArray; external name 'args'; Memory : TJSArrayBuffer; external name 'memory'; end; { TFresnelMessage_DrawOffscreenCanvasOnWindow } TFresnelMessage_DrawOffscreenCanvasOnWindow = class external name 'Object' (TFresnelAtomicMessage) WindowID : Integer; external name 'windowID'; ImageBitmap : TJSImageBitmap; external name 'imageBitmap'; end; { TFresnelMessages } TFresnelMessages = class abstract // static class class function CreateMessage_MenuSupport(const aValue : Boolean) : TFresnelMessage; static; end; // -------------------------------------------------------------------- // -------------------------------------------------------------------- // -------------------------------------------------------------------- implementation { TFresnelMessageHelper } class function TFresnelMessageHelper.newMessage(aType: String): TFresnelMessage; begin Result:=TFresnelMessage(createCommand(cmdFresnel)); end; // -------------------------------------------------------------------- // -------------------------------------------------------------------- // -------------------------------------------------------------------- { TFresnelMessages } // CreateMessage_MenuSupport // class function TFresnelMessages.CreateMessage_MenuSupport(const aValue: Boolean): TFresnelMessage; begin Result := TFresnelMessage.newMessage(cFresnel_Message_MenuSupport); Result['value'] := aValue; end; end.