unit uvkuBufferViewFactory; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Vulkan, uvkuBufferView, uvkuAllocationHandler, uvkuDevice; type ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TvkuBufferViewEx = class(TvkuBufferView) private fAllocHandler: TvkuAllocationHandler; fOwnsHandler: Boolean; public destructor Destroy; override; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TvkuBufferViewFactory = class(TObject) private fDeviceCommands: TVkDeviceCommands; fFlags: VkBufferViewCreateFlags; fBuffer: VkBuffer; fFormat: TVkFormat; fOffset: VkDeviceSize; fRange: VkDeviceSize; public property DeviceCommands: TVkDeviceCommands read fDeviceCommands; property Flags: VkBufferViewCreateFlags read fFlags write fFlags; property Buffer: VkBuffer read fBuffer write fBuffer; property Format: TVkFormat read fFormat write fFormat; property Offset: VkDeviceSize read fOffset write fOffset; property Range: VkDeviceSize read fRange write fRange; function CreateBufferView: TvkuBufferViewEx; function CreateBufferView( const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuBufferViewEx; constructor Create(const aDevice: TvkuDevice); constructor Create(const aDeviceCommands: TVkDeviceCommands); end; implementation ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TvkuBufferViewEx/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// destructor TvkuBufferViewEx.Destroy; begin inherited Destroy; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TvkuBufferViewFactory////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function TvkuBufferViewFactory.CreateBufferView: TvkuBufferViewEx; begin result := CreateBufferView(nil, false); end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// function TvkuBufferViewFactory.CreateBufferView(const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuBufferViewEx; var CreateInfo: TVkBufferViewCreateInfo; begin FillByte(CreateInfo, SizeOf(CreateInfo), 0); CreateInfo.sType := VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; CreateInfo.pNext := nil; CreateInfo.flags := fFlags; CreateInfo.buffer := fBuffer; CreateInfo.format := fFormat; CreateInfo.offset := fOffset; CreateInfo.range := fRange; if Assigned(aAllocHandler) then result := TvkuBufferViewEx.Create(CreateInfo, fDeviceCommands, aAllocHandler.GetAllocationCallbacksPtr) else result := TvkuBufferViewEx.Create(CreateInfo, fDeviceCommands); try TvkuBufferViewEx(result).fAllocHandler := aAllocHandler; TvkuBufferViewEx(result).fOwnsHandler := aOwnsHandler; except FreeAndNil(result); raise; end; end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TvkuBufferViewFactory.Create(const aDevice: TvkuDevice); begin Create(aDevice.DeviceCommands); end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// constructor TvkuBufferViewFactory.Create(const aDeviceCommands: TVkDeviceCommands); begin inherited Create; fDeviceCommands := aDeviceCommands; end; end.