|
- unit uvkuImageViewFactory;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan, uvkuImageView, uvkuFactoryBase, uvkuTypes;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuImageSubresourceRange = class(TvkuStructure)
- AspectMask: VkImageAspectFlags;
- BaseMipLevel: VkUint32;
- LevelCount: VkUint32;
- BaseArrayLayer: VkUint32;
- LayerCount: VkUint32;
-
- function GetStructure: TVkImageSubresourceRange;
- procedure SetStructure(const aData: TVkImageSubresourceRange);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuImageViewFactory = class(TvkuDeviceObjFactory)
- private
- fFlags: VkImageViewCreateFlags;
- fImage: VkImage;
- fViewType: TVkImageViewType;
- fFormat: TVkFormat;
- fComponents: TVkComponentMapping;
- fSubresourceRange: TvkuImageSubresourceRange;
- public
- property Flags: VkImageViewCreateFlags read fFlags write fFlags;
- property Image: VkImage read fImage write fImage;
- property ViewType: TVkImageViewType read fViewType write fViewType;
- property Format: TVkFormat read fFormat write fFormat;
- property Components: TVkComponentMapping read fComponents write fComponents;
- property SubresourceRange: TvkuImageSubresourceRange read fSubresourceRange;
-
- function GetStructure: TVkImageViewCreateInfo;
- procedure SetStructure(const aData: TVkImageViewCreateInfo);
-
- function CreateImageView: TvkuImageView;
-
- procedure AfterConstruction; override;
- procedure BeforeDestruction; override;
- end;
-
- implementation
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuImageSubresourceRange//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageSubresourceRange.GetStructure: TVkImageSubresourceRange;
- begin
- FillByte(result, SizeOf(result), 0);
- result.aspectMask := AspectMask;
- result.baseMipLevel := BaseMipLevel;
- result.levelCount := LevelCount;
- result.baseArrayLayer := BaseArrayLayer;
- result.layerCount := LayerCount;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageSubresourceRange.SetStructure(const aData: TVkImageSubresourceRange);
- begin
- AspectMask := aData.aspectMask;
- BaseMipLevel := aData.baseMipLevel;
- LevelCount := aData.levelCount;
- BaseArrayLayer := aData.baseArrayLayer;
- LayerCount := aData.layerCount;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuImageViewFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageViewFactory.GetStructure: TVkImageViewCreateInfo;
- begin
- FillByte(result, SizeOf(result), 0);
- result.sType := VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
- result.pNext := nil;
- result.flags := fFlags;
- result.image := fImage;
- result.viewType := fViewType;
- result.format := fFormat;
- result.components := fComponents;
- result.subresourceRange := fSubresourceRange.GetStructure;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageViewFactory.SetStructure(const aData: TVkImageViewCreateInfo);
- begin
- fFlags := aData.flags;
- fImage := aData.image;
- fViewType := aData.viewType;
- fFormat := aData.format;
- fComponents := aData.components;
- fSubresourceRange.SetStructure(aData.subresourceRange);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageViewFactory.CreateImageView: TvkuImageView;
- begin
- result := TvkuImageView.Create(GetStructure, DeviceCommands, AllocCallbacks);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageViewFactory.AfterConstruction;
- begin
- inherited AfterConstruction;
- fSubresourceRange := TvkuImageSubresourceRange.Create;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuImageViewFactory.BeforeDestruction;
- begin
- FreeAndNil(fSubresourceRange);
- inherited BeforeDestruction;
- end;
-
- end.
|