MemoryBuffer.pas 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. {$mode objfpc}
  2. unit MemoryBuffer;
  3. interface
  4. uses
  5. JS;
  6. type
  7. TMemoryBuffer = class
  8. private
  9. byteBuffer: TJSUint8Array;
  10. public
  11. constructor Create (size: integer);
  12. procedure AddBytes (count: integer; data: array of byte);
  13. procedure AddFloats (count: integer; data: array of single);
  14. property GetBytes: TJSUint8Array read byteBuffer;
  15. private
  16. byteOffset: integer;
  17. floatBuffer: TJSFloat32Array;
  18. end;
  19. implementation
  20. constructor TMemoryBuffer.Create (size: integer);
  21. begin
  22. byteBuffer := TJSUint8Array.New(size);
  23. end;
  24. procedure TMemoryBuffer.AddBytes (count: integer; data: array of byte);
  25. begin
  26. //writeln('AddBytes: @', byteOffset, ' -> ', data);
  27. byteBuffer._set(data, byteOffset);
  28. byteOffset := byteOffset + (count * 1);
  29. end;
  30. procedure TMemoryBuffer.AddFloats (count: integer; data: array of single);
  31. var
  32. floatOffset: integer;
  33. begin
  34. floatOffset := byteOffset div 4;
  35. //writeln('AddFloats: @', byteOffset, '/', floatOffset, ' -> ', data);
  36. if floatBuffer = nil then
  37. floatBuffer := TJSFloat32Array.New(byteBuffer.buffer, 0, byteBuffer.byteLength div 4);
  38. floatBuffer._set(data, floatOffset);
  39. byteOffset := byteOffset + (count * 4);
  40. end;
  41. end.