|
- unit uvkuSwapChainFactory;
-
- {$mode objfpc}{$H+}
-
- interface
-
- uses
- Classes, SysUtils,
- Vulkan, uvkuSwapChain, uvkuTypes, uvkuFactoryBase;
-
- type
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- TvkuSwapChainFactory = class(TvkuDeviceObjFactory)
- private
- fFlags: VkSwapchainCreateFlagsKHR;
- fSurface: VkSurfaceKHR;
- fMinImageCount: VkUint32;
- fImageFormat: TVkFormat;
- fImageColorSpace: TVkColorSpaceKHR;
- fImageExtent: TVkExtent2D;
- fImageArrayLayers: VkUint32;
- fImageUsage: VkImageUsageFlags;
- fImageSharingMode: TVkSharingMode;
- fQueueFamilyIndices: TVkUint32List;
- fPreTransform: TVkSurfaceTransformFlagBitsKHR;
- fComposideAlpha: TVkCompositeAlphaFlagBitsKHR;
- fPresentMode: TVkPresentModeKHR;
- fClipped: Boolean;
- fOldSwapChain: VkSwapchainKHR;
- public
- property Flags: VkSwapchainCreateFlagsKHR read fFlags write fFlags;
- property Surface: VkSurfaceKHR read fSurface write fSurface;
- property MinImageCount: VkUint32 read fMinImageCount write fMinImageCount;
- property ImageFormat: TVkFormat read fImageFormat write fImageFormat;
- property ImageColorSpace: TVkColorSpaceKHR read fImageColorSpace write fImageColorSpace;
- property ImageExtent: TVkExtent2D read fImageExtent write fImageExtent;
- property ImageArrayLayers: VkUint32 read fImageArrayLayers write fImageArrayLayers;
- property ImageUsage: VkImageUsageFlags read fImageUsage write fImageUsage;
- property ImageSharingMode: TVkSharingMode read fImageSharingMode write fImageSharingMode;
- property PreTransform: TVkSurfaceTransformFlagBitsKHR read fPreTransform write fPreTransform;
- property ComposideAlpha: TVkCompositeAlphaFlagBitsKHR read fComposideAlpha write fComposideAlpha;
- property PresentMode: TVkPresentModeKHR read fPresentMode write fPresentMode;
- property Clipped: Boolean read fClipped write fClipped;
- property OldSwapChain: VkSwapchainKHR read fOldSwapChain write fOldSwapChain;
- property QueueFamilyIndices: TVkUint32List read fQueueFamilyIndices;
-
- function GetStructure: TVkSwapchainCreateInfoKHR;
- procedure SetStructure(const aData: TVkSwapchainCreateInfoKHR);
-
- function CreateSwapchain: TvkuSwapChain;
-
- procedure AfterConstruction; override;
- procedure BeforeDestruction; override;
- end;
-
- implementation
-
- uses
- uvkuUtils;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //TvkuSwapChainFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuSwapChainFactory.GetStructure: TVkSwapchainCreateInfoKHR;
- begin
- FillByte(result, SizeOf(result), 0);
- result.sType := VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
- result.pNext := nil;
- result.flags := fFlags;
- result.surface := fSurface;
- result.minImageCount := fMinImageCount;
- result.imageFormat := fImageFormat;
- result.imageColorSpace := fImageColorSpace;
- result.imageExtent := fImageExtent;
- result.imageArrayLayers := fImageArrayLayers;
- result.imageUsage := fImageUsage;
- result.imageSharingMode := fImageSharingMode;
- result.queueFamilyIndexCount := fQueueFamilyIndices.Length;
- result.pQueueFamilyIndices := fQueueFamilyIndices.PData;
- result.preTransform := fPreTransform;
- result.compositeAlpha := fComposideAlpha;
- result.presentMode := fPresentMode;
- result.oldSwapchain := fOldSwapChain;
- if fClipped
- then result.clipped := VK_TRUE
- else result.clipped := VK_FALSE;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuSwapChainFactory.SetStructure(const aData: TVkSwapchainCreateInfoKHR);
- begin
- fFlags := aData.flags;
- fSurface := aData.surface;
- fMinImageCount := aData.minImageCount;
- fImageFormat := aData.imageFormat;
- fImageColorSpace := aData.imageColorSpace;
- fImageExtent := aData.imageExtent;
- fImageArrayLayers := aData.imageArrayLayers;
- fImageUsage := aData.imageUsage;
- fImageSharingMode := aData.imageSharingMode;
- fPreTransform := aData.preTransform;
- fComposideAlpha := aData.compositeAlpha;
- fPresentMode := aData.presentMode;
- fOldSwapChain := aData.oldSwapchain;
- fClipped := (aData.clipped <> 0);
-
- fQueueFamilyIndices.SetData(aData.pQueueFamilyIndices, aData.queueFamilyIndexCount);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- function TvkuSwapChainFactory.CreateSwapchain: TvkuSwapChain;
- begin
- result := TvkuSwapChain.Create(GetStructure, DeviceCommands, AllocCallbacks);
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuSwapChainFactory.AfterConstruction;
- begin
- inherited AfterConstruction;
- fPresentMode := VK_PRESENT_MODE_FIFO_KHR;
- fQueueFamilyIndices := TVkUint32List.Create;
- end;
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- procedure TvkuSwapChainFactory.BeforeDestruction;
- begin
- FreeAndNil(fQueueFamilyIndices);
- inherited BeforeDestruction;
- end;
-
- end.
|