|
- unit uvkuImageViewFactory;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan, uvkuAllocationHandler, uvkuImageView, uvkuDevice, uvkuFactoryBase;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuImageViewEx = class(TvkuImageView)
- private
- fAllocHandler: TvkuAllocationHandler;
- fOwnsHandler: Boolean;
- public
- destructor Destroy; override;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuImageViewFactory = class(TvkuDeviceObjFactory)
- private
- fFlags: VkImageViewCreateFlags;
- fImage: VkImage;
- fViewType: TVkImageViewType;
- fFormat: TVkFormat;
- fComponents: TVkComponentMapping;
- fSubresourceRange: TVkImageSubresourceRange;
- 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: TVkImageSubresourceRange read fSubresourceRange write fSubresourceRange;
-
- function CreateImageView: TvkuImageViewEx;
- function CreateImageView(
- const aAllocHandler: TvkuAllocationHandler;
- const aOwnsHandler: Boolean): TvkuImageViewEx;
- end;
-
- implementation
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuImageViewEx////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- destructor TvkuImageViewEx.Destroy;
- begin
- inherited Destroy;
- if fOwnsHandler then
- FreeAndNil(fAllocHandler);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuImageViewFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageViewFactory.CreateImageView: TvkuImageViewEx;
- begin
- result := CreateImageView(nil, false);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuImageViewFactory.CreateImageView(const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuImageViewEx;
- var CreateInfo: TVkImageViewCreateInfo;
- begin
- FillByte(CreateInfo, SizeOf(CreateInfo), 0);
- CreateInfo.sType := VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
- CreateInfo.pNext := nil;
- CreateInfo.flags := fFlags;
- CreateInfo.image := fImage;
- CreateInfo.viewType := fViewType;
- CreateInfo.format := fFormat;
- CreateInfo.components := fComponents;
- CreateInfo.subresourceRange := fSubresourceRange;
- if Assigned(aAllocHandler)
- then result := TvkuImageViewEx.Create(CreateInfo, DeviceCommands, aAllocHandler.GetAllocationCallbacksPtr)
- else result := TvkuImageViewEx.Create(CreateInfo, DeviceCommands);
- try
- TvkuImageViewEx(result).fAllocHandler := aAllocHandler;
- TvkuImageViewEx(result).fOwnsHandler := aOwnsHandler;
- except
- FreeAndNil(result);
- raise;
- end;
- end;
-
- end.
|