|
- unit uvkuImageFactory;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan, uvkuImage, uvkuTypes, uvkuFactoryBase;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuImageFactory = class(TvkuDeviceObjFactory)
- private
- fFlags: VkImageCreateFlags;
- fImageType: TVkImageType;
- fFormat: TVkFormat;
- fExtent: TVkExtent3D;
- fMipLevels: VkUint32;
- fArrayLayers: VkUint32;
- fSamples: TVkSampleCountFlagBits;
- fTiling: TVkImageTiling;
- fUsage: VkImageUsageFlags;
- fSharingMode: TVkSharingMode;
- fQueueFamilyIndices: TVkUint32List;
- fInitialLayout: TVkImageLayout;
- public
- property Flags: VkImageCreateFlags read fFlags write fFlags;
- property ImageType: TVkImageType read fImageType write fImageType;
- property Format: TVkFormat read fFormat write fFormat;
- property Extent: TVkExtent3D read fExtent write fExtent;
- property MipLevels: VkUint32 read fMipLevels write fMipLevels;
- property ArrayLayers: VkUint32 read fArrayLayers write fArrayLayers;
- property Samples: TVkSampleCountFlagBits read fSamples write fSamples;
- property Tiling: TVkImageTiling read fTiling write fTiling;
- property Usage: VkImageUsageFlags read fUsage write fUsage;
- property SharingMode: TVkSharingMode read fSharingMode write fSharingMode;
- property InitialLayout: TVkImageLayout read fInitialLayout write fInitialLayout;
- property QueueFamilyIndices: TVkUint32List read fQueueFamilyIndices;
-
- function GetStructure: TVkImageCreateInfo;
- procedure SetStructure(const aData: TVkImageCreateInfo);
-
- function CreateImage: TvkuImage;
-
- procedure AfterConstruction; override;
- procedure BeforeDestruction; override;
- end;
-
- implementation
-
- uses
- uvkuUtils;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuImageFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageFactory.GetStructure: TVkImageCreateInfo;
- begin
- FillByte(result, SizeOf(result), 0);
- result.sType := VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
- result.pNext := nil;
- result.flags := fFlags;
- result.imageType := fImageType;
- result.format := fFormat;
- result.extent := fExtent;
- result.mipLevels := fMipLevels;
- result.arrayLayers := fArrayLayers;
- result.samples := fSamples;
- result.tiling := fTiling;
- result.usage := fUsage;
- result.sharingMode := fSharingMode;
- result.queueFamilyIndexCount := fQueueFamilyIndices.Length;
- result.pQueueFamilyIndices := fQueueFamilyIndices.PData;
- result.initialLayout := fInitialLayout;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageFactory.SetStructure(const aData: TVkImageCreateInfo);
- var i: Integer;
- begin
- fFlags := aData.flags;
- fImageType := aData.imageType;
- fFormat := aData.format;
- fExtent := aData.extent;
- fMipLevels := aData.mipLevels;
- fArrayLayers := aData.arrayLayers;
- fSamples := aData.samples;
- fTiling := aData.tiling;
- fUsage := aData.usage;
- fSharingMode := aData.sharingMode;
- fInitialLayout := aData.initialLayout;
-
- fQueueFamilyIndices.SetData(aData.pQueueFamilyIndices, aData.queueFamilyIndexCount);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageFactory.CreateImage: TvkuImage;
- begin
- result := TvkuImage.Create(GetStructure, DeviceCommands, AllocCallbacks);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageFactory.AfterConstruction;
- begin
- inherited AfterConstruction;
- fQueueFamilyIndices := TVkUint32List.Create;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageFactory.BeforeDestruction;
- begin
- FreeAndNil(fQueueFamilyIndices);
- inherited BeforeDestruction;
- end;
-
- end.
|