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.