123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- {$mode objfpc}
- unit MemoryBuffer;
- interface
- uses
- JS;
- type
- TMemoryBuffer = class
- private
- byteBuffer: TJSUint8Array;
- public
- constructor Create (size: integer);
- procedure AddBytes (count: integer; data: array of byte);
- procedure AddFloats (count: integer; data: array of single);
- property GetBytes: TJSUint8Array read byteBuffer;
- private
- byteOffset: integer;
- floatBuffer: TJSFloat32Array;
- end;
- implementation
- constructor TMemoryBuffer.Create (size: integer);
- begin
- byteBuffer := TJSUint8Array.New(size);
- end;
- procedure TMemoryBuffer.AddBytes (count: integer; data: array of byte);
- begin
- //writeln('AddBytes: @', byteOffset, ' -> ', data);
- byteBuffer._set(data, byteOffset);
- byteOffset := byteOffset + (count * 1);
- end;
- procedure TMemoryBuffer.AddFloats (count: integer; data: array of single);
- var
- floatOffset: integer;
- begin
- floatOffset := byteOffset div 4;
- //writeln('AddFloats: @', byteOffset, '/', floatOffset, ' -> ', data);
- if floatBuffer = nil then
- floatBuffer := TJSFloat32Array.New(byteBuffer.buffer, 0, byteBuffer.byteLength div 4);
- floatBuffer._set(data, floatOffset);
- byteOffset := byteOffset + (count * 4);
- end;
- end.
|