Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

133 lignes
6.1 KiB

  1. unit uvkuSwapChainFactory;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,
  6. Vulkan, uvkuSwapChain, uvkuTypes, uvkuFactoryBase;
  7. type
  8. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TvkuSwapChainFactory = class(TvkuDeviceObjFactory)
  10. private
  11. fFlags: VkSwapchainCreateFlagsKHR;
  12. fSurface: VkSurfaceKHR;
  13. fMinImageCount: VkUint32;
  14. fImageFormat: TVkFormat;
  15. fImageColorSpace: TVkColorSpaceKHR;
  16. fImageExtent: TVkExtent2D;
  17. fImageArrayLayers: VkUint32;
  18. fImageUsage: VkImageUsageFlags;
  19. fImageSharingMode: TVkSharingMode;
  20. fQueueFamilyIndices: TVkUint32List;
  21. fPreTransform: TVkSurfaceTransformFlagBitsKHR;
  22. fComposideAlpha: TVkCompositeAlphaFlagBitsKHR;
  23. fPresentMode: TVkPresentModeKHR;
  24. fClipped: Boolean;
  25. fOldSwapChain: VkSwapchainKHR;
  26. public
  27. property Flags: VkSwapchainCreateFlagsKHR read fFlags write fFlags;
  28. property Surface: VkSurfaceKHR read fSurface write fSurface;
  29. property MinImageCount: VkUint32 read fMinImageCount write fMinImageCount;
  30. property ImageFormat: TVkFormat read fImageFormat write fImageFormat;
  31. property ImageColorSpace: TVkColorSpaceKHR read fImageColorSpace write fImageColorSpace;
  32. property ImageExtent: TVkExtent2D read fImageExtent write fImageExtent;
  33. property ImageArrayLayers: VkUint32 read fImageArrayLayers write fImageArrayLayers;
  34. property ImageUsage: VkImageUsageFlags read fImageUsage write fImageUsage;
  35. property ImageSharingMode: TVkSharingMode read fImageSharingMode write fImageSharingMode;
  36. property PreTransform: TVkSurfaceTransformFlagBitsKHR read fPreTransform write fPreTransform;
  37. property ComposideAlpha: TVkCompositeAlphaFlagBitsKHR read fComposideAlpha write fComposideAlpha;
  38. property PresentMode: TVkPresentModeKHR read fPresentMode write fPresentMode;
  39. property Clipped: Boolean read fClipped write fClipped;
  40. property OldSwapChain: VkSwapchainKHR read fOldSwapChain write fOldSwapChain;
  41. property QueueFamilyIndices: TVkUint32List read fQueueFamilyIndices;
  42. function GetStructure: TVkSwapchainCreateInfoKHR;
  43. procedure SetStructure(const aData: TVkSwapchainCreateInfoKHR);
  44. function CreateSwapchain: TvkuSwapChain;
  45. procedure AfterConstruction; override;
  46. procedure BeforeDestruction; override;
  47. end;
  48. implementation
  49. uses
  50. uvkuUtils;
  51. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  52. //TvkuSwapChainFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  54. function TvkuSwapChainFactory.GetStructure: TVkSwapchainCreateInfoKHR;
  55. begin
  56. FillByte(result, SizeOf(result), 0);
  57. result.sType := VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
  58. result.pNext := nil;
  59. result.flags := fFlags;
  60. result.surface := fSurface;
  61. result.minImageCount := fMinImageCount;
  62. result.imageFormat := fImageFormat;
  63. result.imageColorSpace := fImageColorSpace;
  64. result.imageExtent := fImageExtent;
  65. result.imageArrayLayers := fImageArrayLayers;
  66. result.imageUsage := fImageUsage;
  67. result.imageSharingMode := fImageSharingMode;
  68. result.queueFamilyIndexCount := fQueueFamilyIndices.Length;
  69. result.pQueueFamilyIndices := fQueueFamilyIndices.PData;
  70. result.preTransform := fPreTransform;
  71. result.compositeAlpha := fComposideAlpha;
  72. result.presentMode := fPresentMode;
  73. result.oldSwapchain := fOldSwapChain;
  74. if fClipped
  75. then result.clipped := VK_TRUE
  76. else result.clipped := VK_FALSE;
  77. end;
  78. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  79. procedure TvkuSwapChainFactory.SetStructure(const aData: TVkSwapchainCreateInfoKHR);
  80. begin
  81. fFlags := aData.flags;
  82. fSurface := aData.surface;
  83. fMinImageCount := aData.minImageCount;
  84. fImageFormat := aData.imageFormat;
  85. fImageColorSpace := aData.imageColorSpace;
  86. fImageExtent := aData.imageExtent;
  87. fImageArrayLayers := aData.imageArrayLayers;
  88. fImageUsage := aData.imageUsage;
  89. fImageSharingMode := aData.imageSharingMode;
  90. fPreTransform := aData.preTransform;
  91. fComposideAlpha := aData.compositeAlpha;
  92. fPresentMode := aData.presentMode;
  93. fOldSwapChain := aData.oldSwapchain;
  94. fClipped := (aData.clipped <> 0);
  95. fQueueFamilyIndices.SetData(aData.pQueueFamilyIndices, aData.queueFamilyIndexCount);
  96. end;
  97. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  98. function TvkuSwapChainFactory.CreateSwapchain: TvkuSwapChain;
  99. begin
  100. result := TvkuSwapChain.Create(GetStructure, DeviceCommands, AllocCallbacks);
  101. end;
  102. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  103. procedure TvkuSwapChainFactory.AfterConstruction;
  104. begin
  105. inherited AfterConstruction;
  106. fPresentMode := VK_PRESENT_MODE_FIFO_KHR;
  107. fQueueFamilyIndices := TVkUint32List.Create;
  108. end;
  109. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  110. procedure TvkuSwapChainFactory.BeforeDestruction;
  111. begin
  112. FreeAndNil(fQueueFamilyIndices);
  113. inherited BeforeDestruction;
  114. end;
  115. end.