unit uvkuBase; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Vulkan; type ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TvkuObject = class(TObject) end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TvkuHandle = class(TvkuObject) private fOwnsHandle: Boolean; public property OwnsHandle: Boolean read fOwnsHandle write fOwnsHandle; constructor Create; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TvkuAllocHandle = class(TvkuHandle) private fAllocCallbacks: PVkAllocationCallbacks; protected property AllocCallbacks: PVkAllocationCallbacks read fAllocCallbacks; procedure SetAllocCallbacks(const aAllocCallbacks: TVkAllocationCallbacks); procedure SetAllocCallbacks(const aAllocCallbacks: PVkAllocationCallbacks); procedure DisposeAllocCallbacks; public constructor Create; destructor Destroy; override; end; implementation ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TvkuHandle///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TvkuHandle.Create; begin inherited Create; fOwnsHandle := true; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TvkuAllocHandle//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TvkuAllocHandle.SetAllocCallbacks(const aAllocCallbacks: TVkAllocationCallbacks); begin if not Assigned(fAllocCallbacks) then new(fAllocCallbacks); fAllocCallbacks^ := aAllocCallbacks; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TvkuAllocHandle.SetAllocCallbacks(const aAllocCallbacks: PVkAllocationCallbacks); begin if Assigned(aAllocCallbacks) then SetAllocCallbacks(aAllocCallbacks^); end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TvkuAllocHandle.DisposeAllocCallbacks; begin if not Assigned(fAllocCallbacks) then exit; Dispose(fAllocCallbacks); fAllocCallbacks := nil; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TvkuAllocHandle.Create; begin inherited Create; fAllocCallbacks := nil; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// destructor TvkuAllocHandle.Destroy; begin inherited Destroy; DisposeAllocCallbacks; end; end.