fresnel.messages.pas2js.wasmapi.pp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. {
  2. This file is part of the Fresnel Library.
  3. Copyright (c) 2025 by the FPC & Lazarus teams.
  4. Pas2js Fresnel interface - Inter-worker messages API
  5. See the file COPYING.modifiedLGPL.txt, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. {$mode objfpc}
  12. {$h+}
  13. {$modeswitch externalclass}
  14. {$modeswitch advancedrecords}
  15. {$DEFINE IMAGE_USEOSC}
  16. unit fresnel.messages.pas2js.wasmapi;
  17. interface
  18. uses
  19. SysUtils, Types, Rtl.WorkerCommands,
  20. JS, WebOrWorker,
  21. fresnel.wasm.shared;
  22. const
  23. cmdFresnel = 'fresnel';
  24. // Atomic calls
  25. cFresnel_Message_Call = 'fresnel_call';
  26. cFresnel_Message_DOCOW = 'fresnel_docow';
  27. // Fire & forget
  28. cFresnel_EnqueueEvent = 'fresnel_enqueue_event';
  29. cFresnel_RequestAnimationFrame = 'fresnel_raf';
  30. cFresnel_Tick = 'fresnel_tick';
  31. cFresnel_MenuClick = 'fresnel_menuclick';
  32. cFresnel_EnumerateUserMedia = 'fresnel_usermedia_enum';
  33. cFresnel_UserMediaFrame = 'fresnel_usermedia_frame';
  34. // Host options
  35. cFresnel_Message_MenuSupport = 'menu-support';
  36. type
  37. { TFresnelMessage }
  38. TFresnelMessage = class external name 'Object' (TCustomWorkerCommand)
  39. Typ : String; external name 'type';
  40. end;
  41. { TFresnelMessageHelper }
  42. TFresnelMessageHelper = class helper (TCustomWorkerCommandHelper) for TFresnelMessage
  43. class function newMessage(aType : String) : TFresnelMessage; static;
  44. end;
  45. { TFresnelMessage_EnqueueEvent }
  46. TFresnelMessage_EnqueueEvent = class external name 'Object' (TFresnelMessage)
  47. Event : TJSObject; external name 'event';
  48. end;
  49. { TFresnelMessage_RequestAnimationFrame }
  50. TFresnelMessage_RequestAnimationFrame = class external name 'Object' (TFresnelMessage)
  51. Timestamp : Double; external name 'timestamp';
  52. UserData : TWasmPointer; external name 'userData';
  53. end;
  54. { TFresnelMessage_EnumerateUserMedia }
  55. TFresnelMessage_EnumerateUserMedia = class external name 'Object' (TFresnelMessage)
  56. UserMediaData : String; external name 'userMediaData';
  57. UserData : TWasmPointer; external name 'userData';
  58. end;
  59. { TFresnelMessage_UserMediaFrame }
  60. TFresnelMessage_UserMediaFrame = class external name 'Object' (TFresnelMessage)
  61. Timestamp : Double; external name 'timestamp';
  62. VideoID : TVideoElementID; external name 'videoID';
  63. ImageBitmap : TJSImageBitmap; external name 'imageBitmap';
  64. end;
  65. { TFresnelMessage_HandleMenuClick }
  66. TFresnelMessage_HandleMenuClick = class external name 'Object' (TFresnelMessage)
  67. MenuID : TMenuID; external name 'menuID';
  68. UserData : TWasmPointer; external name 'userData';
  69. end;
  70. { TFresnelAtomicMessage }
  71. TFresnelAtomicMessage = class external name 'Object' (TFresnelMessage)
  72. ID : Integer; external name 'id';
  73. Atomic : TJSInt32Array; external name 'atomic';
  74. end;
  75. { TFresnelMessage_FunctionCall }
  76. TFresnelMessage_FunctionCall = class external name 'Object' (TFresnelAtomicMessage)
  77. FuncName : String; external name 'funcName';
  78. Args : TJSValueDynArray; external name 'args';
  79. Memory : TJSArrayBuffer; external name 'memory';
  80. end;
  81. { TFresnelMessage_DrawOffscreenCanvasOnWindow }
  82. TFresnelMessage_DrawOffscreenCanvasOnWindow = class external name 'Object' (TFresnelAtomicMessage)
  83. WindowID : Integer; external name 'windowID';
  84. ImageBitmap : TJSImageBitmap; external name 'imageBitmap';
  85. end;
  86. { TFresnelMessages }
  87. TFresnelMessages = class abstract // static class
  88. class function CreateMessage_MenuSupport(const aValue : Boolean) : TFresnelMessage; static;
  89. end;
  90. // --------------------------------------------------------------------
  91. // --------------------------------------------------------------------
  92. // --------------------------------------------------------------------
  93. implementation
  94. { TFresnelMessageHelper }
  95. class function TFresnelMessageHelper.newMessage(aType: String): TFresnelMessage;
  96. begin
  97. Result:=TFresnelMessage(createCommand(cmdFresnel));
  98. end;
  99. // --------------------------------------------------------------------
  100. // --------------------------------------------------------------------
  101. // --------------------------------------------------------------------
  102. { TFresnelMessages }
  103. // CreateMessage_MenuSupport
  104. //
  105. class function TFresnelMessages.CreateMessage_MenuSupport(const aValue: Boolean): TFresnelMessage;
  106. begin
  107. Result := TFresnelMessage.newMessage(cFresnel_Message_MenuSupport);
  108. Result['value'] := aValue;
  109. end;
  110. end.