Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

91 righe
3.9 KiB

  1. unit uvkuImageViewFactory;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils,
  6. Vulkan, uvkuAllocationHandler, uvkuImageView, uvkuFactoryBase;
  7. type
  8. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TvkuImageViewEx = class(TvkuImageView)
  10. private
  11. fAllocHandler: TvkuAllocationHandler;
  12. fOwnsHandler: Boolean;
  13. public
  14. destructor Destroy; override;
  15. end;
  16. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  17. TvkuImageViewFactory = class(TvkuDeviceObjFactory)
  18. private
  19. fFlags: VkImageViewCreateFlags;
  20. fImage: VkImage;
  21. fViewType: TVkImageViewType;
  22. fFormat: TVkFormat;
  23. fComponents: TVkComponentMapping;
  24. fSubresourceRange: TVkImageSubresourceRange;
  25. public
  26. property Flags: VkImageViewCreateFlags read fFlags write fFlags;
  27. property Image: VkImage read fImage write fImage;
  28. property ViewType: TVkImageViewType read fViewType write fViewType;
  29. property Format: TVkFormat read fFormat write fFormat;
  30. property Components: TVkComponentMapping read fComponents write fComponents;
  31. property SubresourceRange: TVkImageSubresourceRange read fSubresourceRange write fSubresourceRange;
  32. function CreateImageView: TvkuImageViewEx;
  33. function CreateImageView(
  34. const aAllocHandler: TvkuAllocationHandler;
  35. const aOwnsHandler: Boolean): TvkuImageViewEx;
  36. end;
  37. implementation
  38. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. //TvkuImageViewEx////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  40. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  41. destructor TvkuImageViewEx.Destroy;
  42. begin
  43. inherited Destroy;
  44. if fOwnsHandler then
  45. FreeAndNil(fAllocHandler);
  46. end;
  47. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. //TvkuImageViewFactory///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  49. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  50. function TvkuImageViewFactory.CreateImageView: TvkuImageViewEx;
  51. begin
  52. result := CreateImageView(nil, false);
  53. end;
  54. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  55. function TvkuImageViewFactory.CreateImageView(const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuImageViewEx;
  56. var CreateInfo: TVkImageViewCreateInfo;
  57. begin
  58. FillByte(CreateInfo, SizeOf(CreateInfo), 0);
  59. CreateInfo.sType := VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
  60. CreateInfo.pNext := nil;
  61. CreateInfo.flags := fFlags;
  62. CreateInfo.image := fImage;
  63. CreateInfo.viewType := fViewType;
  64. CreateInfo.format := fFormat;
  65. CreateInfo.components := fComponents;
  66. CreateInfo.subresourceRange := fSubresourceRange;
  67. if Assigned(aAllocHandler)
  68. then result := TvkuImageViewEx.Create(CreateInfo, DeviceCommands, aAllocHandler.GetAllocationCallbacksPtr)
  69. else result := TvkuImageViewEx.Create(CreateInfo, DeviceCommands);
  70. try
  71. TvkuImageViewEx(result).fAllocHandler := aAllocHandler;
  72. TvkuImageViewEx(result).fOwnsHandler := aOwnsHandler;
  73. except
  74. FreeAndNil(result);
  75. raise;
  76. end;
  77. end;
  78. end.