123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- {
- 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.
|