|
- unit uvkuBufferViewFactory;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan, uvkuBufferView, uvkuAllocationHandler, uvkuFactoryBase;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuBufferViewEx = class(TvkuBufferView)
- private
- fAllocHandler: TvkuAllocationHandler;
- fOwnsHandler: Boolean;
- public
- destructor Destroy; override;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuBufferViewFactory = class(TvkuDeviceObjFactory)
- private
- fFlags: VkBufferViewCreateFlags;
- fBuffer: VkBuffer;
- fFormat: TVkFormat;
- fOffset: VkDeviceSize;
- fRange: VkDeviceSize;
- public
- 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;
- end;
-
- implementation
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuBufferViewEx///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- destructor TvkuBufferViewEx.Destroy;
- begin
- inherited Destroy;
- if fOwnsHandler then
- FreeAndNil(fAllocHandler);
- 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, DeviceCommands, aAllocHandler.GetAllocationCallbacksPtr)
- else result := TvkuBufferViewEx.Create(CreateInfo, DeviceCommands);
- try
- TvkuBufferViewEx(result).fAllocHandler := aAllocHandler;
- TvkuBufferViewEx(result).fOwnsHandler := aOwnsHandler;
- except
- FreeAndNil(result);
- raise;
- end;
- end;
-
- end.
|