|
- unit uvkuBufferFactory;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan, uvkuBuffer, uvkuTypes, uvkuFactoryBase;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuBufferFactory = class(TvkuDeviceObjFactory)
- private
- fFlags: VkBufferCreateFlags;
- fSize: VkDeviceSize;
- fUsage: VkBufferUsageFlags;
- fSharingMode: TVkSharingMode;
- fQueueFamilyIndices: TVkUint32List;
- public
- property Flags: VkBufferCreateFlags read fFlags write fFlags;
- property Size: VkDeviceSize read fSize write fSize;
- property Usage: VkBufferUsageFlags read fUsage write fUsage;
- property SharingMode: TVkSharingMode read fSharingMode write fSharingMode;
- property QueueFamilyIndices: TVkUint32List read fQueueFamilyIndices;
-
- function GetStructure: TVkBufferCreateInfo;
- procedure SetStructure(const aData: TVkBufferCreateInfo);
-
- function CreateBuffer: TvkuBuffer;
-
- procedure AfterConstruction; override;
- procedure BeforeDestruction; override;
- end;
-
- implementation
-
- uses
- uvkuUtils;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuBufferFactory//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuBufferFactory.GetStructure: TVkBufferCreateInfo;
- begin
- FillByte(result, SizeOf(result), 0);
- result.sType := VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
- result.pNext := nil;
- result.flags := fFlags;
- result.size := fSize;
- result.usage := fUsage;
- result.sharingMode := fSharingMode;
- result.queueFamilyIndexCount := fQueueFamilyIndices.Length;
- result.pQueueFamilyIndices := fQueueFamilyIndices.PData;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuBufferFactory.SetStructure(const aData: TVkBufferCreateInfo);
- var i: Integer;
- begin
- fFlags := aData.flags;
- fSize := aData.size;
- fUsage := aData.usage;
- fSharingMode := aData.sharingMode;
- fQueueFamilyIndices.SetData(aData.pQueueFamilyIndices, aData.queueFamilyIndexCount);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuBufferFactory.CreateBuffer: TvkuBuffer;
- begin
- result := TvkuBuffer.Create(GetStructure, DeviceCommands, AllocCallbacks);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuBufferFactory.AfterConstruction;
- begin
- inherited AfterConstruction;
- fQueueFamilyIndices := TVkUint32List.Create;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuBufferFactory.BeforeDestruction;
- begin
- FreeAndNil(fQueueFamilyIndices);
- inherited BeforeDestruction;
- end;
-
- end.
|